<!doctype html>
<html>
<head>
	<meta charset="utf-8">
	<title>发行说明 | Laravel 5.3 中文文档
</title>
	<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
	<meta name="author" content="Taylor Otwell">
	<meta name="description" content="发行说明,支持策略,Laravel 5.3,Laravel 5.2,Laravel 5.1.11,Laravel 5.1.4,Laravel 5.1,Laravel 5.0,Laravel 4.2,Laravel 4.1,支持策略,对于 LTS 版本，比如 Laravel 5.1，会提供为期两年的 bug 修复和三年的安全修...
">
	<meta name="keywords" content="laravel,laravel中国,laravel中文,laravel框架中文,laravel文档,laravel框架中国,laravel中文文档">
	<meta name="viewport" content="width=device-width, initial-scale=1">
			<link rel="canonical" href="../5.4/releases.html" />
		<!--[if lte IE 9]>
		<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
	<![endif]-->
	<link rel="stylesheet" href="../../build/assets/css/laravel-3d54d47ea3.css">
	<link rel="apple-touch-icon" href="../../favicon.png.jpeg">
</head>
<body class="docs language-php">

	<span class="overlay"></span>

	<nav class="main">
		<a href="../../index.html" class="brand nav-block">
			<svg version="1.1"
	 xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
	 x="0px" y="0px" width="84.1px" height="57.6px" viewBox="0 0 84.1 57.6" enable-background="new 0 0 84.1 57.6"
	 xml:space="preserve">
<defs>
</defs>
<path fill="#FB503B" d="M83.8,26.9c-0.6-0.6-8.3-10.3-9.6-11.9c-1.4-1.6-2-1.3-2.9-1.2s-10.6,1.8-11.7,1.9c-1.1,0.2-1.8,0.6-1.1,1.6
	c0.6,0.9,7,9.9,8.4,12l-25.5,6.1L21.2,1.5c-0.8-1.2-1-1.6-2.8-1.5C16.6,0.1,2.5,1.3,1.5,1.3c-1,0.1-2.1,0.5-1.1,2.9
	c1,2.4,17,36.8,17.4,37.8c0.4,1,1.6,2.6,4.3,2c2.8-0.7,12.4-3.2,17.7-4.6c2.8,5,8.4,15.2,9.5,16.7c1.4,2,2.4,1.6,4.5,1
	c1.7-0.5,26.2-9.3,27.3-9.8c1.1-0.5,1.8-0.8,1-1.9c-0.6-0.8-7-9.5-10.4-14c2.3-0.6,10.6-2.8,11.5-3.1C84.2,28,84.4,27.5,83.8,26.9z
	 M37.5,36.4c-0.3,0.1-14.6,3.5-15.3,3.7c-0.8,0.2-0.8,0.1-0.8-0.2C21.2,39.6,4.4,4.8,4.1,4.4c-0.2-0.4-0.2-0.8,0-0.8
	c0.2,0,13.5-1.2,13.9-1.2c0.5,0,0.4,0.1,0.6,0.4c0,0,18.7,32.3,19,32.8C38,36.1,37.8,36.3,37.5,36.4z M77.7,43.9
	c0.2,0.4,0.5,0.6-0.3,0.8c-0.7,0.3-24.1,8.2-24.6,8.4c-0.5,0.2-0.8,0.3-1.4-0.6s-8.2-14-8.2-14L68.1,32c0.6-0.2,0.8-0.3,1.2,0.3
	C69.7,33,77.5,43.6,77.7,43.9z M79.3,26.3c-0.6,0.1-9.7,2.4-9.7,2.4l-7.5-10.2c-0.2-0.3-0.4-0.6,0.1-0.7c0.5-0.1,9-1.6,9.4-1.7
	c0.4-0.1,0.7-0.2,1.2,0.5c0.5,0.6,6.9,8.8,7.2,9.1C80.3,26,79.9,26.2,79.3,26.3z"/>
</svg>

			<span>Laravel</span>
		</a>

        <div class="search nav-block">
            <svg version="1.1"
	 xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
	 x="0px" y="0px" width="16px" height="16px" viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<defs>
</defs>
<g>
	<g>
		<path fill="#A1A1A1" d="M5.8,11.7c-1.6,0-3-0.6-4.1-1.7S0,7.4,0,5.8s0.6-3,1.7-4.1C2.8,0.6,4.3,0,5.8,0s3,0.6,4.1,1.7
			c2.3,2.3,2.3,6,0,8.3C8.9,11.1,7.4,11.7,5.8,11.7z M5.8,1C4.5,1,3.3,1.5,2.4,2.4C1.5,3.3,1,4.5,1,5.8s0.5,2.5,1.4,3.4
			c0.9,0.9,2.1,1.4,3.4,1.4s2.5-0.5,3.4-1.4c1.9-1.9,1.9-5,0-6.9C8.4,1.5,7.1,1,5.8,1z"/>
	</g>
	<g>
		<path fill="#A1A1A1" d="M15.5,16c-0.1,0-0.3,0-0.3-0.1L9.3,10c-0.2-0.2-0.2-0.5,0-0.7s0.5-0.2,0.7,0l5.9,5.9
			c0.2,0.2,0.2,0.5,0,0.7C15.8,16,15.6,16,15.5,16z"/>
	</g>
</g>
</svg>

            <input placeholder="搜索文档" type="text" v-model="search" id="search-input" v-on:blur="reset" />
        </div>

		<ul class="main-nav" v-if="! search">
			<li class="nav-docs"><a href="../5.4.html">文档</a></li>
<li ><a href="https://news.laravel-china.org/" class="no-pjax">Laravel 资讯</a></li>
<li class="dropdown"><a href="https://laravel-china.org/">Laravel China 社区</a></li>
<li class="nav-forge"><a href="https://laravel-china.org/categories/1">酷工作</a></li>
<li class="nav-docs"><a href="http://lumen.laravel-china.org">Lumen</a></li>
<li class="nav-forge"><a href="https://cs.laravel-china.org/">速查表</a></li>
<li class="nav-forge"><a href="https://laravel-china.org/laravel-tutorial/5.1/about">《Laravel 入门教程》</a></li>
		</ul>

        			<div class="switcher">
	<div class="dropdown">
		<button class="btn dropdown-toggle btn-inverted" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-expanded="true">
			<!--<span class="faint">v</span> -->
			5.3
			<span class="caret"></span>
		</button>
		<ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu1">
							<li role="presentation">
					<a role="menuitem" tabindex="-1" href="../5.4/releases.html">5.4</a>
				</li>
							<li role="presentation">
					<a role="menuitem" tabindex="-1" href="releases.html">5.3</a>
				</li>
							<li role="presentation">
					<a role="menuitem" tabindex="-1" href="../5.2/releases.html">5.2</a>
				</li>
							<li role="presentation">
					<a role="menuitem" tabindex="-1" href="../5.1/releases.html">5.1</a>
				</li>
					</ul>
	</div>
</div>
		
        <div class="responsive-sidebar-nav">
			<a href="releases.html#" class="toggle-slide menu-link btn">&#9776;</a>
		</div>
	</nav>

	<nav id="slide-menu" class="slide-menu" role="navigation">

	<div class="brand">
		<a href="../../index.html">
			<img src="../../assets/img/laravel-logo-white.png" height="50">
		</a>
	</div>

	<ul class="slide-main-nav">
		<li><a href="../../index.html">Home</a></li>
		<li class="nav-docs"><a href="../5.4.html">文档</a></li>
<li ><a href="https://news.laravel-china.org/" class="no-pjax">Laravel 资讯</a></li>
<li class="dropdown"><a href="https://laravel-china.org/">Laravel China 社区</a></li>
<li class="nav-forge"><a href="https://laravel-china.org/categories/1">酷工作</a></li>
<li class="nav-docs"><a href="http://lumen.laravel-china.org">Lumen</a></li>
<li class="nav-forge"><a href="https://cs.laravel-china.org/">速查表</a></li>
<li class="nav-forge"><a href="https://laravel-china.org/laravel-tutorial/5.1/about">《Laravel 入门教程》</a></li>
	</ul>

	<div class="slide-docs-nav">
		<h2>Documentation</h2>
		<ul>
<li>前言
<ul>
<li><a href="about.html">翻译说明</a></li>
<li><a href="releases.html">发行说明</a></li>
<li><a href="upgrade.html">升级说明</a></li>
<li><a href="contributions.html">贡献导引</a></li>
<li><a href="../../api/5.3/index.html">API 文档</a></li>
</ul></li>
<li>入门指南
<ul>
<li><a href="installation.html">安装</a></li>
<li><a href="configuration.html">配置信息</a></li>
<li><a href="structure.html">文件夹结构</a></li>
<li><a href="errors.html">错误与日志</a></li>
</ul></li>
<li>开发环境部署
<ul>
<li><a href="homestead.html">Homestead</a></li>
<li><a href="valet.html">Valet</a></li>
</ul></li>
<li>核心概念
<ul>
<li><a href="container.html">服务容器</a></li>
<li><a href="providers.html">服务提供者</a></li>
<li><a href="facades.html">Facades</a></li>
<li><a href="contracts.html">Contracts</a></li>
</ul></li>
<li>HTTP 层
<ul>
<li><a href="routing.html">路由</a></li>
<li><a href="middleware.html">中间件</a></li>
<li><a href="csrf.html">CSRF 保护</a></li>
<li><a href="controllers.html">控制器</a></li>
<li><a href="requests.html">请求</a></li>
<li><a href="responses.html">响应</a></li>
<li><a href="session.html">Session</a></li>
<li><a href="validation.html">表单验证</a></li>
</ul></li>
<li>视图和模板
<ul>
<li><a href="views.html">视图</a></li>
<li><a href="blade.html">Blade 模板</a></li>
<li><a href="localization.html">本地化</a></li>
</ul></li>
<li>JavaScript 与 CSS
<ul>
<li><a href="frontend.html">入门指南</a></li>
<li><a href="elixir.html">Elixir</a></li>
</ul></li>
<li>安全
<ul>
<li><a href="authentication.html">用户认证</a></li>
<li><a href="authorization.html">用户授权</a></li>
<li><a href="passwords.html">重置密码</a></li>
<li><a href="passport.html">API 认证</a></li>
<li><a href="encryption.html">加密解密</a></li>
<li><a href="hashing.html">哈希</a></li>
</ul></li>
<li>综合话题
<ul>
<li><a href="broadcasting.html">广播系统</a></li>
<li><a href="cache.html">缓存系统</a></li>
<li><a href="events.html">事件系统</a></li>
<li><a href="filesystem.html">文件存储</a></li>
<li><a href="mail.html">邮件发送</a></li>
<li><a href="notifications.html">消息通知</a></li>
<li><a href="queues.html">队列</a></li>
</ul></li>
<li>数据库
<ul>
<li><a href="database.html">快速入门</a></li>
<li><a href="queries.html">查询构造器</a></li>
<li><a href="pagination.html">分页</a></li>
<li><a href="migrations.html">数据库迁移</a></li>
<li><a href="seeding.html">数据填充</a></li>
<li><a href="redis.html">Redis</a></li>
</ul></li>
<li>Eloquent ORM
<ul>
<li><a href="eloquent.html">快速入门</a></li>
<li><a href="eloquent-relationships.html">模型关联</a></li>
<li><a href="eloquent-collections.html">Eloquent 集合</a></li>
<li><a href="eloquent-mutators.html">修改器</a></li>
<li><a href="eloquent-serialization.html">序列化</a></li>
</ul></li>
<li>Artisan 控制台
<ul>
<li><a href="artisan.html">Artisan 命令行</a></li>
<li><a href="scheduling.html">任务调度</a></li>
</ul></li>
<li>测试
<ul>
<li><a href="testing.html">快速入门</a></li>
<li><a href="application-testing.html">应用程序测试</a></li>
<li><a href="database-testing.html">数据库</a></li>
<li><a href="mocking.html">模拟器</a></li>
</ul></li>
<li>官方扩展包
<ul>
<li><a href="billing.html">Cashier 交易工具包</a></li>
<li><a href="envoy.html">Envoy 部署工具</a></li>
<li><a href="passport.html">Passport OAuth 认证</a></li>
<li><a href="scout.html">Scout 全文搜索</a></li>
<li><a href="https://github.com/laravel/socialite">Socialite 社会化登录</a></li>
</ul></li>
<li>附录
<ul>
<li><a href="collections.html">集合</a></li>
<li><a href="helpers.html">辅助函数</a></li>
<li><a href="packages.html">扩展包开发</a></li>
</ul></li>
</ul>
	</div>

</nav>

<div class="docs-wrapper container">

	<section class="sidebar">

            <div class="header">
              <a type="button" class="btn btn-primary btn-inverted btn-lg btn-block turnofflight"><i class="fa fa-lightbulb-o"></i> 夜间模式 </a>
              <br>
              <div class="versions text-center ">
                <a class="doc-btn btn-inverted " href="../5.4.html" title="Laravel 5.4 中文文档">C5.4</a>
                <a class="doc-btn btn-inverted active" href="../5.3.html" title="Laravel 5.3 中文文档">C5.3</a>
                <a class="doc-btn btn-inverted " href="../5.1.html" title="Laravel 5.1 中文文档">C5.1</a>
              </div>
            </div>

            <a href="https://laravel-china.org/topics/3383" target="_blank" rel="nofollow" title="" style="display: block;margin-bottom: 23px;">
                <img src="https://dn-phphub.qbox.me/uploads/images/201612/10/1/k7wwMpJduq.jpg" style="width: 100%;border: 1px solid #d8d3d3;box-shadow: 0 0 30px #d4d4d4;-moz-box-shadow: 0 0 30px #ccc;-webkit-box-shadow: 0 0 30px #d4d4d4;margin-bottom: 30px;margin-top: 10px;border-radius: 4px;">
            </a>

		<ul>
<li>前言
<ul>
<li><a href="about.html">翻译说明</a></li>
<li><a href="releases.html">发行说明</a></li>
<li><a href="upgrade.html">升级说明</a></li>
<li><a href="contributions.html">贡献导引</a></li>
<li><a href="../../api/5.3/index.html">API 文档</a></li>
</ul></li>
<li>入门指南
<ul>
<li><a href="installation.html">安装</a></li>
<li><a href="configuration.html">配置信息</a></li>
<li><a href="structure.html">文件夹结构</a></li>
<li><a href="errors.html">错误与日志</a></li>
</ul></li>
<li>开发环境部署
<ul>
<li><a href="homestead.html">Homestead</a></li>
<li><a href="valet.html">Valet</a></li>
</ul></li>
<li>核心概念
<ul>
<li><a href="container.html">服务容器</a></li>
<li><a href="providers.html">服务提供者</a></li>
<li><a href="facades.html">Facades</a></li>
<li><a href="contracts.html">Contracts</a></li>
</ul></li>
<li>HTTP 层
<ul>
<li><a href="routing.html">路由</a></li>
<li><a href="middleware.html">中间件</a></li>
<li><a href="csrf.html">CSRF 保护</a></li>
<li><a href="controllers.html">控制器</a></li>
<li><a href="requests.html">请求</a></li>
<li><a href="responses.html">响应</a></li>
<li><a href="session.html">Session</a></li>
<li><a href="validation.html">表单验证</a></li>
</ul></li>
<li>视图和模板
<ul>
<li><a href="views.html">视图</a></li>
<li><a href="blade.html">Blade 模板</a></li>
<li><a href="localization.html">本地化</a></li>
</ul></li>
<li>JavaScript 与 CSS
<ul>
<li><a href="frontend.html">入门指南</a></li>
<li><a href="elixir.html">Elixir</a></li>
</ul></li>
<li>安全
<ul>
<li><a href="authentication.html">用户认证</a></li>
<li><a href="authorization.html">用户授权</a></li>
<li><a href="passwords.html">重置密码</a></li>
<li><a href="passport.html">API 认证</a></li>
<li><a href="encryption.html">加密解密</a></li>
<li><a href="hashing.html">哈希</a></li>
</ul></li>
<li>综合话题
<ul>
<li><a href="broadcasting.html">广播系统</a></li>
<li><a href="cache.html">缓存系统</a></li>
<li><a href="events.html">事件系统</a></li>
<li><a href="filesystem.html">文件存储</a></li>
<li><a href="mail.html">邮件发送</a></li>
<li><a href="notifications.html">消息通知</a></li>
<li><a href="queues.html">队列</a></li>
</ul></li>
<li>数据库
<ul>
<li><a href="database.html">快速入门</a></li>
<li><a href="queries.html">查询构造器</a></li>
<li><a href="pagination.html">分页</a></li>
<li><a href="migrations.html">数据库迁移</a></li>
<li><a href="seeding.html">数据填充</a></li>
<li><a href="redis.html">Redis</a></li>
</ul></li>
<li>Eloquent ORM
<ul>
<li><a href="eloquent.html">快速入门</a></li>
<li><a href="eloquent-relationships.html">模型关联</a></li>
<li><a href="eloquent-collections.html">Eloquent 集合</a></li>
<li><a href="eloquent-mutators.html">修改器</a></li>
<li><a href="eloquent-serialization.html">序列化</a></li>
</ul></li>
<li>Artisan 控制台
<ul>
<li><a href="artisan.html">Artisan 命令行</a></li>
<li><a href="scheduling.html">任务调度</a></li>
</ul></li>
<li>测试
<ul>
<li><a href="testing.html">快速入门</a></li>
<li><a href="application-testing.html">应用程序测试</a></li>
<li><a href="database-testing.html">数据库</a></li>
<li><a href="mocking.html">模拟器</a></li>
</ul></li>
<li>官方扩展包
<ul>
<li><a href="billing.html">Cashier 交易工具包</a></li>
<li><a href="envoy.html">Envoy 部署工具</a></li>
<li><a href="passport.html">Passport OAuth 认证</a></li>
<li><a href="scout.html">Scout 全文搜索</a></li>
<li><a href="https://github.com/laravel/socialite">Socialite 社会化登录</a></li>
</ul></li>
<li>附录
<ul>
<li><a href="collections.html">集合</a></li>
<li><a href="helpers.html">辅助函数</a></li>
<li><a href="packages.html">扩展包开发</a></li>
</ul></li>
</ul>

		<hr>
            <ul>
              <li>社交账号
                <ul>
                  <li><a href="http://weibo.com/laravelnews">微博：「Laravel资讯」</a></li>
                  <li>
                    新手 QQ 群：483184286
                  </li>
                  <li>
                    <br>
                    订阅 Laravel 资讯
<img class="image-border popover-with-html" data-content="" src="https://dn-phphub.qbox.me/uploads/images/201609/19/1/pVYzokV0Od.jpg" style="width: 148px;height: 148px;border:1px solid #ccc;padding:2px;border-radius:3px;margin-top:5px;" data-original-title="" title="">
                  </li>

                </ul>
              </li>
            </ul>

	</section>

	

	<article>

		<div class="alert alert-warning" role="alert">
			一小时同步一次，更多信息请查阅 <a href="https://laravel-china.org/topics/2095">文档导读</a>。
			发现瑕疵？你也可以
				<a href="https://github.com/laravel-china/laravel-docs/edit/5.3/releases.md"><i class="fa fa-pencil-square-o"></i> 改进本文</a>
			。
		</div>

		<div class="main-content">
			<h1>发行说明</h1>
<ul>
<li><a href="releases.html#support-policy">支持策略</a></li>
<li><a href="releases.html#laravel-5.3">Laravel 5.3</a></li>
<li><a href="releases.html#laravel-5.2">Laravel 5.2</a></li>
<li><a href="releases.html#laravel-5.1.11">Laravel 5.1.11</a></li>
<li><a href="releases.html#laravel-5.1.4">Laravel 5.1.4</a></li>
<li><a href="releases.html#laravel-5.1">Laravel 5.1</a></li>
<li><a href="releases.html#laravel-5.0">Laravel 5.0</a></li>
<li><a href="releases.html#laravel-4.2">Laravel 4.2</a></li>
<li><a href="releases.html#laravel-4.1">Laravel 4.1</a></li>
</ul>
<p><a name="support-policy"></a></p>
<h2>支持策略</h2>
<p>对于 LTS 版本，比如 Laravel 5.1，会提供为期两年的 bug 修复和三年的安全修复支持。LTS 版本是 Laravel 能提供的维护时间最长的发行版。</p>
<p>对于其他通用版本，只提供六个月的 bug 修复和一年的安全修复支持。</p>
<blockquote>
<p><a href="https://phphub.org/topics/2594">Laravel 的发布路线图</a> - by <a href="http://github.com/summerblue">Summer</a></p>
</blockquote>
<p><a name="laravel-5.3"></a></p>
<h2>Laravel 5.3</h2>
<p>Laravel 5.3 在 5.2 基础上进行了优化，新特性包括以下：</p>
<ul>
<li><a href="notifications.html">消息通知 Laravel Notifications</a>；</li>
<li><a href="broadcasting.html">事件广播 Laravel Echo</a>；</li>
<li><a href="passport.html">OAuth2 授权认证 Laravel Passport</a>；</li>
<li><a href="scout.html">全文搜索引擎 Laravel Scout</a>；</li>
<li>Laravel Elixir 开始支持 Webpack；</li>
<li>Mail 操作类 Laravel Mailable；</li>
<li><code>web</code> 和 <code>api</code> 的路由分离；</li>
<li>基于闭包的控制台命令；</li>
<li>更加易用的辅助函数，用于存储上传的文件；</li>
<li>支持 POPO 和单动作控制；</li>
<li>优化默认的前端脚手架，等等。</li>
</ul>
<h3>消息通知</h3>
<blockquote>
<p>{video} Laracasts 上关于此新特性的免费视频 <a href="https://laracasts.com/series/whats-new-in-laravel-5-3/episodes/9">video tutorial</a>。</p>
</blockquote>
<p>Laravel Notifications 提供了简单、优雅的 API 支持你通过不同的渠道发送通知，例如电子邮件、Slack、手机短信等等。</p>
<p>例如，你可以定义一个单据，当该单据被付款后，则通过邮件和手机短信发送提醒通知：</p>
<p>你可用通过下面这个简单的方法来实现：</p>
<pre><code>$user-&gt;notify(new InvoicePaid($invoice));</code></pre>
<p><a href="http://laravel-notification-channels.com">Laravel 社区</a> 已经为通知系统编写了各式的驱动，甚至包括对 iOS 和 Android 通知的支持，更多关于通知系统的信息，请查看 <a href="notifications.html">完整的文档</a>。</p>
<h3>WebSockets / 事件广播</h3>
<p>事件广播在之前版本的 Laravel 中已经存在，Laravel 5.3 现支持对私有和已存在的 WebSocket 频道添加频道级认证：</p>
<pre><code>/*
 * 频道认证
 */
Broadcast::channel('orders.*', function ($user, $orderId) {
    return $user-&gt;placedOrder($orderId);
});</code></pre>
<p>Laravel Echo 是一个可通过 NPM 安装的全新的 JavaScript 包，会随 Laravel 5.3 一起发布。Echo 提供了简单、优雅的 API 接口，支持你在 JavaScript 客户端应用中，订阅频道和监听服务器端事件。</p>
<p>Echo 提供的支持包括 <a href="https://pusher.com">Pusher</a> 以及 <a href="http://socket.io">Socket.io</a>：</p>
<pre><code>Echo.channel('orders.' + orderId)
    .listen('ShippingStatusUpdated', (e) =&gt; {
        console.log(e.description);
    });</code></pre>
<p>除了订阅到传统频道上，Laravel Echo 也让频道的监听与管理变得更加简单：</p>
<pre><code>Echo.join('chat.' + roomId)
    .here((users) =&gt; {
        //
    })
    .joining((user) =&gt; {
        console.log(user.name);
    })
    .leaving((user) =&gt; {
        console.log(user.name);
    });</code></pre>
<p>了解更多关于 Echo 和事件广播的信息，请查阅 <a href="broadcasting.html">完整文档</a>.</p>
<h3>Laravel Passport (OAuth2 认证服务)</h3>
<blockquote>
<p>{video} Laracasts 上关于此功能的免费视频 <a href="https://laracasts.com/series/whats-new-in-laravel-5-3/episodes/13">video tutorial</a>。</p>
</blockquote>
<p>Laravel 5.3 的 Passport 让 API 认证变得简单。Laravel Passport 可以让你在几分钟内为应用程序创建一个完整的 OAuth2 认证服务，Passport 基于 Alex Bilbie 的 <a href="https://github.com/thephpleague/oauth2-server">League OAuth2 server</a> 实现。</p>
<p>Passport 让发放 OAuth2 令牌（Access Token）变得轻松，你还可以允许用户通过 Web 界面创建 <code>个人访问令牌</code>。</p>
<p>为了方便提高开发效率，Passport 内置了一个 Vue 组件，该组件提供了 OAuth2 后台界面功能，允许用户创建客户端、撤销访问令牌，以及更多其他功能：</p>
<pre><code>&lt;passport-clients&gt;&lt;/passport-clients&gt;
&lt;passport-authorized-clients&gt;&lt;/passport-authorized-clients&gt;
&lt;passport-personal-access-tokens&gt;&lt;/passport-personal-access-tokens&gt;</code></pre>
<p>如果你不想使用 Vue 组件，你可以自由的定制用于管理客户端和访问令牌的前端及后台。Passport 提供了一个简单的 JSON API，你可以在前端使用任何 JavaScript 框架与之集成。</p>
<p>Passport 还提供了方便的 API 让你定制「Token 访问域」：</p>
<pre><code>Passport::tokensCan([
    'place-orders' =&gt; 'Place new orders',
    'check-status' =&gt; 'Check order status',
]);</code></pre>
<p>此外，Passport 还包含了一个用于检查「Token 访问域」访问权限的中间件：</p>
<pre><code>Route::get('/orders/{order}/status', function (Order $order) {
    // 检查令牌是否拥有 "check-status" 访问域
})-&gt;middleware('scope:check-status');</code></pre>
<p>最后，Passport 还支持从 JavaScript 应用访问你的 API，而不必担心访问令牌传输。</p>
<p>Passport 通过加密 JWT cookies 和同步「CSRF 令牌」来实现此功能，让你专注于业务开发。</p>
<p>更多关于 Passport 信息，请查看 <a href="passport.html">完整文档</a>。</p>
<h3>搜索系统 Laravel Scout</h3>
<p>Laravel Scout 提供了一个简单的、基于驱动的、针对 <a href="eloquent.html">Eloquent</a> 模型的全文搜索解决方案。</p>
<p>通过模型观察者，Scout 会自动同步更新 Eloquent 的搜索索引，目前，Scout使用 <a href="https://www.algolia.com/">Algolia</a> 驱动，你可以自由的编写自己驱动来扩展 Scout。</p>
<p>你只需要添加 Searchable trait 到模型中，就能让模型支持搜索：</p>
<pre><code>&lt;?php

namespace App;

use Laravel\Scout\Searchable;
use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    use Searchable;
}</code></pre>
<p>在你在模型中添加 trait 以后，数据会在 <code>save</code> 的时候自动保持同步：</p>
<pre><code>$order = new Order;

// ...

$order-&gt;save();</code></pre>
<p>在模型被成功索引以后，可以很轻松的使用全文搜索，你甚至可以为索引的结果进行分页操作：</p>
<pre><code>return Order::search('Star Trek')-&gt;get();

return Order::search('Star Trek')-&gt;where('user_id', 1)-&gt;paginate();</code></pre>
<p>更多 Scout 功能，请查阅 <a href="scout.html">Scout 的完整文档</a>。</p>
<h3>Mailable 对象</h3>
<blockquote>
<p>{video} Laracasts 上关于此功能的免费视频 <a href="https://laracasts.com/series/whats-new-in-laravel-5-3/episodes/6">video tutorial</a>。</p>
</blockquote>
<p>Laravel 5.3 Mailable 是一个崭新的 Mail 操作类，通过一种更加优雅的方式发送邮件，而不再需要在闭包中自定义邮件信息。</p>
<p>例如，定义一个简单的邮寄对象用作发送欢迎邮件：</p>
<pre><code>class WelcomeMessage extends Mailable
{
    use Queueable, SerializesModels;

    /**
     * 新建消息
     *
     * @return $this
     */
    public function build()
    {
        return $this-&gt;view('emails.welcome');
    }
}</code></pre>
<p>Mailable 对象被创建以后，你可以使用一个简单、优雅的 API 将其发送给用户：</p>
<pre><code>Mail::to($user)-&gt;send(new WelcomeMessage);</code></pre>
<p>Mailable 还支持队列操作，只需要在类声明里实现 <code>ShouldQueue</code> 即可：</p>
<pre><code>class WelcomeMessage extends Mailable implements ShouldQueue
{
    //
}</code></pre>
<p>更多关于 Mailable 的信息，请查看 <a href="mail.html">完整文档</a>。</p>
<h3>存储上传文件</h3>
<blockquote>
<p>{video} Laracasts 上关于此功能的免费视频 <a href="https://laracasts.com/series/whats-new-in-laravel-5-3/episodes/12">video tutorial</a>。</p>
</blockquote>
<p>存储用户上传文件，在 Web 开发中是一个很常见的任务。</p>
<p>Laravel 5.3 提供了一个便捷的 <code>store</code> 方法，只需要对上传文件对象调用此方法，并传参准备存储的路径即可：</p>
<pre><code>/**
 * 更新用户头像
 *
 * @param  Request  $request
 * @return Response
 */
public function update(Request $request)
{
    $path = $request-&gt;file('avatar')-&gt;store('avatars', 's3');

    return $path;
}</code></pre>
<p>更多上传文件信息，请查看 <a href="filesystem.html#file-uploads">完整文档</a>。</p>
<h3>Webpack 和 Laravel Elixir</h3>
<p>Laravel Elixir 6.0 与 Laravel 5.3 共同发布，内置了 Webpack 和 Rollup JavaScript。</p>
<p>默认情况下，Laravel 5.3 的 <code>gulpfile.js</code> 使用 Webpack 来编译你的 JavaScript 文件：</p>
<pre><code>elixir(mix =&gt; {
    mix.sass('app.scss')
       .webpack('app.js');
});</code></pre>
<p>完整文档请见 <a href="elixir.html">Laravel Elixir</a> 。</p>
<h3>前端架构</h3>
<blockquote>
<p>{video} Laracasts 上关于此功能的免费视频 <a href="https://laracasts.com/series/whats-new-in-laravel-5-3/episodes/4">video tutorial</a>。</p>
</blockquote>
<p>Laravel 5.3 提供了一个更加现代的前端架构。这主要会影响 <code>make:auth</code> 命令生成认证相关的前端脚手架代码，不再从 CDN 中加载前端资源，所有依赖被定义在默认的 package.json 文件中，你可以自行修改。</p>
<p>此外，支持单文件的 <a href="https://vuejs.org">Vue 组件</a> 现在直接开箱即用， <code>resources/assets/js/components</code> 目录下包含了一个简单的示例 <code>Example.vue</code>，新的 <code>resources/assets/js/app.js</code> 用来配置 JavaScript 类库依赖和 Vue 子模块。</p>
<p>这种架构对开始开发现代的、强大的 JavaScript 应用提供了更好的支持，而不需要要求应用使用任何特定 JavaScript 或者 CSS 框架。</p>
<p>更多信息，请查看对应文档 <a href="frontend.html">前端文档</a>。</p>
<h3>路由文件</h3>
<p>默认情况下，新安装的 Laravel 5.3 应用在新的顶级目录 <code>routes</code> 下包含了 <code>web.php</code> 和 <code>api.php</code> 两个 <code>HTTP</code> 路由文件，你也可以按照此方法自行扩展。</p>
<p>API 相关的路由在 <code>RouteServiceProvider</code> 中指定了自动添加 <code>api</code> 前缀。</p>
<h3>闭包控制台命令</h3>
<p>除了通过命令类定义之外，Artisan 命令现支持在 <code>app/Console/Kernel.php</code> 文件中使用简单闭包的方式定义。</p>
<p>在新安装的 Laravel 5.3 应用中，<code>commands</code> 方法会加载 <code>routes/console.php</code> 文件，从而允许你基于闭包、以路由风格定义控制台命令：</p>
<pre><code>Artisan::command('build {project}', function ($project) {
    $this-&gt;info('Building project...');
});</code></pre>
<p>更多信息请参见 <a href="artisan.html#closure-commands">Artisan 文档</a>。</p>
<h3>Blade 中的 <code>$loop</code> 魔术变量</h3>
<blockquote>
<p>{video} Laracasts 上关于此功能的免费视频 <a href="https://laracasts.com/series/whats-new-in-laravel-5-3/episodes/7">video tutorial</a>。</p>
</blockquote>
<p>当我们在 Blade 模板中循环遍历的时候，<code>$loop</code> 魔术变量将会在循环中生效。通过该变量可以访问很多有用的信息，比如当前循环索引值，以及当前循环是第一个还是最后一个：</p>
<pre><code>@foreach ($users as $user)
    @if ($loop-&gt;first)
        This is the first iteration.
    @endif

    @if ($loop-&gt;last)
        This is the last iteration.
    @endif

    &lt;p&gt;This is user {{ $user-&gt;id }}&lt;/p&gt;
@endforeach</code></pre>
<p>更多信息请查看 <a href="blade.html#the-loop-variable">Blade 文档</a>.</p>
<p><a name="laravel-5.2"></a></p>
<h2>Laravel 5.2</h2>
<p>Laravel 5.2 在 Laravel 5.1 的基础上进行了优化，新特性包括以下：</p>
<ul>
<li>支持更多样的用户认证驱动；</li>
<li>隐式数据模型绑定；</li>
<li>简化 Eloquent 全局作用域；</li>
<li>内置用户认证脚手架支持；</li>
<li>中间件组；</li>
<li>访问频率限制中间件；</li>
<li>数组认证的优化等</li>
</ul>
<h3>用户认证驱动 / &quot;多认证系统&quot;</h3>
<p>在之前的 Laravel 版本中，框架只支持默认的、基于 session 的认证驱动，且在单个应用中只能拥有一个认证模型类。</p>
<p>Laravel 5.2 对此进行了改进，你可以定义多个认证驱动，还支持多个可认证的数据模型以及用户表，并且可以独立控制其认证。</p>
<p>例如，如果你的应用中有一张「admin」数据库用户表，一张「student」数据库用户表（一个后台管理员用户表和一个前台学生用户表），现在你可以使用  <code>Auth</code> 方法来实现后台用户和学生用户的独立登录而不相互影响。</p>
<h3>用户认证脚手架</h3>
<p>此前 Laravel 后端认证处理已经是相当容易了，现在 Laravel 5.2 提供了一个更加便捷、快速的方法来创建前台认证视图，只需要简单的在终端执行 <code>make:auth</code> 命令即可。</p>
<pre><code>php artisan make:auth</code></pre>
<p>该命令会生成纯文本的、兼容 Bootstrap 样式的视图用于登录、注册和密码重置。该命令还会顺带在路由文件中增加对应的授权路由。</p>
<blockquote>
<p>{note} 该功能特性只能用于新创建的应用，不能用于升级后的应用。</p>
</blockquote>
<h3>隐式数据模型绑定</h3>
<p>隐式模型绑定使得在路由和控制器中注入模型实例更加便捷。例如，假设你定义了一个如下的路由：</p>
<pre><code>use App\User;

Route::get('/user/{user}', function (User $user) {
    return $user;
});</code></pre>
<p>在 Laravel 5.1 中，你通常需要通过 <code>Route::model</code> 方法告诉 Laravel 注入 <code>App\User</code> 实例以匹配路由定义中的 <code>{user}</code> 参数。</p>
<p>现在，在 Laravel 5.2 中，框架将会基于相应 URI 判断 <strong>自动</strong> 注入模型，从而允许你快速访问需要的模型实例。</p>
<p>如路由参数片段 <code>{user}</code> 匹配到 <code>路由闭包</code> 或 <code>控制器方法</code> 中对应参数 <code>$user</code>，且类型提示为 Eloquent 数据模型的话，Laravel 将会自动注入该模型。</p>
<p>更多隐式模型绑定信息，请查看 <a href="routing.html#Route-Model-Binding">HTTP 路由模型绑定部分</a>。</p>
<h3>中间件群组</h3>
<p>中间件群组允许你将多个路由中间件组织到单一、方便的键 （即群组名称）下面，从而可以为某个路由一次指派多个中间件。例如，在同一个应用中构建 Web UI 或 API 时，这一特性很有用。例如，你可以将 session 及 CSRF 路由組合成一个 <code>web</code> 群组，并将访问频率限制分组到 <code>api</code>群组。</p>
<p>实际上，默认的 Laravel 5.2 应用结构采用的正是这种方法。例如，在默认的 <code>App\Http\Kernel.php</code>  文件中你会看到如下内容：</p>
<pre><code>/**
 * 路由中间件群组
 *
 * @var array
 */
protected $middlewareGroups = [
    'web' =&gt; [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
    ],

    'api' =&gt; [
        'throttle:60,1',
    ],
];</code></pre>
<p>然后，<code>web</code> 组可以这样指定给路由：</p>
<pre><code>Route::group(['middleware' =&gt; ['web']], function () {
    //
});</code></pre>
<p>默认的，所有的 <code>app/Http/routes.php</code> 中的路由 <strong>已经</strong> 在 <code>RouteServiceProvider</code> 的 <code>mapWebRoutes</code> 方法中指定了 <code>web</code> 中间件组，所以你不必重复指定。</p>
<h3>访问频率限制</h3>
<p>框架现在内置了一个新的访问频率限制中间件，允许你轻松控制给定 IP 地址在指定时间内对某个路由发起请求的数目。</p>
<p>例如，要限制某个 IP 地址每分钟只能访问某个路由 60 次，你可以这么做：</p>
<pre><code>Route::get('/api/users', ['middleware' =&gt; 'throttle:60,1', function () {
    //
}]);</code></pre>
<h3>数组输入验证</h3>
<p>在 Laravel 5.2 中，可轻松验证表单中的每一个数组输入字段。例如，要验证指定数组输入字段中每一个 email 是否唯一，可以这么实现：</p>
<pre><code>$validator = Validator::make($request-&gt;all(), [
    'person.*.email' =&gt; 'email|unique:users'
]);</code></pre>
<p>同样的，你可以使用「 *」 符号来指定要验证数组字段，自定义验证数组字段的错误消息提醒：</p>
<pre><code>'custom' =&gt; [
    'person.*.email' =&gt; [
        'unique' =&gt; '用户的 Email 必须是唯一的',
    ]
],</code></pre>
<h3>Bail 认证规则</h3>
<p>Laravel 5.2 新添加了一个 <code>bail</code> 认证规则，此规则会在第一个失败认证后停止后面的其他认证检查。例如：你想在 <code>integer</code> 数值检查失败后停止对 <code>unique</code> 唯一性的检查：</p>
<pre><code>$this-&gt;validate($request, [
    'user_id' =&gt; 'bail|integer|unique:users'
]);</code></pre>
<h3>Eloquent 全局作用域优化</h3>
<p>在之前的 Laravel 版本中，Eloquent 全局作用域的实现复杂且容易出错，但在 Laravel 5.2 中，全局查询作用域只需实现一个简单的 <code>apply</code> 方法即可。</p>
<p>更多关于全局作用域的使用，请查阅 <a href="eloquent.html#global-scopes">Eloquent 文档</a>.</p>
<p><a name="laravel-5.1.11"></a></p>
<h2>Laravel 5.1.11</h2>
<p>Laravel 5.1.11 推出了内置的 <a href="authorization.html">授权</a> 功能！利用回调和授权策略类，能更方便的组织应用程序的授权逻辑。</p>
<p>更多的信息请参考 <a href="authorization.html">授权的文档</a>。</p>
<p><a name="laravel-5.1.4"></a></p>
<h2>Laravel 5.1.4</h2>
<p>Laravel 5.1.4 增加了简单的登录限制功能。查阅 <a href="authentication.html#authentication-throttling">认证的文档</a> 以获取更多信息。</p>
<p><a name="laravel-5.1"></a></p>
<h2>Laravel 5.1</h2>
<p>Laravel 5.1 由 Laravel 5.0 改进而成，变更包括但是不限于：</p>
<ul>
<li>采用 PSR-2 规范</li>
<li>支持添加事件广播</li>
<li>中间件参数</li>
<li>Artisan 的改进等等。</li>
</ul>
<h3>PHP 5.5.9+</h3>
<p>由于 PHP 5.4 将在九月「结束寿命」，PHP 开发团队不再提供安全性更新，所以 Laravel 要求 PHP 5.5.9 或更高的版本。</p>
<p>PHP 5.5.9 同时也是最新版本的 PHP 函数库，像是 Guzzle 及 AWS SDK 需要的最小版本需要。</p>
<h3>LTS</h3>
<p>Laravel 5.1 是 Laravel 生态系统中第一个 <strong>长期支持</strong> 版本。Laravel 5.1 会获得两年的 BUG 修复及三年的安全性修复，此策略也使 Laravel 能更好的服务于较大型的企业客户及消费者。</p>
<h3>PSR-2</h3>
<p><a href="https://phphub.org/topics/2079">PSR-2 代码风格指南</a> 已经被 Laravel 框架采用为默认的代码风格指南。此外，所有的生成器都已进行更新，生成的文件将兼容 PSR-2 规范。</p>
<h3>文档</h3>
<p>Laravel 文档的每一页已被精心审阅，并得到显著的改善。所有的代码例子也进行了严密检查，使其有更高的上下文关联性。</p>
<h3>事件广播</h3>
<p>WebSockets 技术越来越多的被现代 Web 应用使用，当服务器上一些数据更新，WebSocket 会实时发送一个消息给客户端，实现即时更新用户状态功能。</p>
<p>Laravel 的事件广播机制很好的支持了此类应用的开发，广播事件允许服务器端代码和 JavaScript 框架间分享相同的事件名称。</p>
<p>了解更多关于事件广播，请查阅 <a href="events.html#broadcasting-events">事件的文档</a>。</p>
<h3>中间件参数</h3>
<p>中间件支持接收自定义传参，例如要在运行特定操作之前，检查当前登录的用户是否具备「某角色」，可以创建 <code>RoleMiddleware</code> 来接收角色名称作为传参：</p>
<pre><code>&lt;?php

namespace App\Http\Middleware;

use Closure;

class RoleMiddleware
{
    /**
     * 运行请求过滤。
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @param  string  $role
     * @return mixed
     */
    public function handle($request, Closure $next, $role)
    {
        if (! $request-&gt;user()-&gt;hasRole($role)) {
            // 重定向...
        }

        return $next($request);
    }

}</code></pre>
<p>在路由中使用冒号 <code>:</code> 来区隔中间件名称与参数，多个参数可使用逗号作为分隔：</p>
<pre><code>Route::put('post/{id}', ['middleware' =&gt; 'role:editor', function ($id) {
    //
}]);</code></pre>
<p>关于中间件的更多信息，请查阅 <a href="middleware.html">中间件的文档</a>。</p>
<h3>测试改进</h3>
<p>Laravel 内置的测试功能已得到显著的改善，新版本提供了简明的接口与应用程序进行交互，响应检查也变得更加轻松。</p>
<p>例如下方的测试：</p>
<pre><code>public function testNewUserRegistration()
{
    $this-&gt;visit('/register')
         -&gt;type('Taylor', 'name')
         -&gt;check('terms')
         -&gt;press('Register')
         -&gt;seePageIs('/dashboard');
}</code></pre>
<p>关于测试的更多信息，请查阅 <a href="testing.html">测试的文档</a>。</p>
<h3>模型工厂</h3>
<p>Laravel 的 <a href="testing.html#model-factories">模型工厂</a> 提供一种简单的方式来创建仿真 Eloquent 模型。</p>
<p>在为 Eloquent 模型定义一组「默认」填充字段后，即可为测试，或者数据填充生成测试模型实例。</p>
<p>另外，模型工厂支持使用 <a href="https://github.com/fzaninotto/Faker">Faker</a> 来生成随机数据：</p>
<pre><code>$factory-&gt;define(App\User::class, function ($faker) {
    return [
        'name' =&gt; $faker-&gt;name,
        'email' =&gt; $faker-&gt;email,
        'password' =&gt; str_random(10),
        'remember_token' =&gt; str_random(10),
    ];
});</code></pre>
<p>更多关于模型工厂的信息，请查阅 <a href="testing.html#model-factories">它的文档</a>。</p>
<h3>Artisan 的改进</h3>
<p>Artisan 命令现支持类似于命名路由的定义，以简单易懂的形式来定义命令行的参数及选项。</p>
<p>举个例子，你可以定义一个简单的命令及它的参数和选项，如下：</p>
<pre><code>/**
 * 命令行的名字及署名。
 *
 * @var string
 */
protected $signature = 'email:send {user} {--force}';</code></pre>
<p>更多关于定义 Artisan 命令的消息，请参考 <a href="artisan.html">Artisan 的文档</a>。</p>
<h3>文件夹结构</h3>
<p>为了更方便理解，<code>app/Commands</code> 目录已经被更名为 <code>app/Jobs</code>。</p>
<p>此外，<code>app/Handler</code> 目录已经被合并成一个只包含事件侦听器的 <code>app/Listeners</code> 目录中。</p>
<p>这不是一个重大的改变，你不必更新成新的文件夹结构也能使用 Laravel 5.1。</p>
<h3>加密</h3>
<p>在 Laravel 之前的版本，加密是通过 <code>mcrypt</code> PHP 扩展进行处理。不过，从 Laravel 5.1 起，加密将采用更积极维护的 <code>openssl</code> 扩展进行处理。</p>
<p><a name="laravel-5.0"></a></p>
<h2>Laravel 5.0</h2>
<p>Laravel 5.0 引进了新的应用程序架构。新架构允许 Laravel 创建更加健壮的应用程序，新架构全面采用新的自动加载标准（PSR-4）。</p>
<p>以下是一些主要变化：</p>
<h3>新的目录结构</h3>
<p>旧的 <code>app/models</code> 目录已经完全被移除。对应的，你所有的代码都放在 <code>app</code> 目录下。</p>
<p>默认情况下使用 <code>App</code> 命名空间。可以使用 <code>app:name</code> Artisan 命令对默认命名空间进行修改。</p>
<p>控制器、中间件，以及表单请求（Laravel 5.0 中新型态的类），分门别类的放在 <code>app/Http</code> 目录下，因为他们都与应用程序的 HTTP 传输层相关。除了一个路由设置的文件外，所有中间件现都分开为独自的类文件。</p>
<p><code>app/Providers</code> 目录取代了旧版 Laravel 4.x <code>app/start</code> 里的文件。这些服务提供者为应用程序提供了各种引导功能，像是错误处理，日志纪录，路由加载等等。当然，你可以任意的创建新的服务提供者。</p>
<p>应用程序的语言文件和视图都被移到 <code>resources</code> 目录下。</p>
<h3>Contracts</h3>
<p>所有 Laravel 组件实现所用的接口都放在 <code>illuminate/contracts</code> 文件夹中，他们没有其他依赖。这些方便集成的接口，让依赖注入变得低耦合，可简单作为 Laravel Facades 的替代选项。</p>
<p>更多关于 contracts 的信息，参考 <a href="contracts.html">完整文档</a>。</p>
<h3>路由缓存</h3>
<p>如果你的应用程序全部使用控制器路由，新的 <code>route:cache</code> Artisan 命令可大幅度地优化路由注册寻找速度。</p>
<p>这对于拥有 100 个以上路由规则的应用程序来说很有用，可以 <strong>大幅度地</strong> 加快应用程序路由部分的处理速度。</p>
<h3>路由中间件</h3>
<p>除了像 Laravel 4 风格的路由「过滤器」，Laravel 5 现在有 HTTP 中间件，而原本的认证和 CSRF 「过滤器」已经改写成中间件。中间件提供了单个、一致的接口取代了各种过滤器，让你在请求进到应用程序前，可以简单地检查甚至拒绝请求。</p>
<p>更多关于中间件的信息，参考 <a href="middleware.html">完整文档</a>。</p>
<h3>控制器方法注入</h3>
<p>除了之前有的类的构造函数注入外，你现在可以在控制器方法中使用依赖注入。<a href="container.html">服务容器</a> 会自动注入依赖，即使路由包含了其它参数也不成问题：</p>
<pre><code>public function createPost(Request $request, PostRepository $posts)
{
    //
}</code></pre>
<h3>认证基本架构</h3>
<p>认证系统默认包含了用户注册，认证，以及重设密码的控制器，还有对应的视图，视图文件存放在 <code>resources/views/auth</code>。</p>
<p>除此之外，「users」数据表迁移也默认包含在框架中。这些简单的资源，可以让你把心思放在产品开发上，而不用陷在编写认证模板的泥潭。</p>
<p>认证相关的视图可以通过 <code>auth/login</code> 以及 <code>auth/register</code> 路由访问。</p>
<p><code>App\Services\Auth\Registrar</code> 会负责处理用户认证和注册用户的相关逻辑。</p>
<h3>事件对象</h3>
<p>你现在可以将事件定义成对象，而不是仅使用字符串。例：</p>
<pre><code>&lt;?php

class PodcastWasPurchased
{
    public $podcast;

    public function __construct(Podcast $podcast)
    {
        $this-&gt;podcast = $podcast;
    }
}</code></pre>
<p>这个事件可以像一般使用那样被派发：</p>
<pre><code>Event::fire(new PodcastWasPurchased($podcast));</code></pre>
<p>当然，你的事件处理会收到事件的对象而不是数据的列表：</p>
<pre><code>&lt;?php

class ReportPodcastPurchase
{
    public function handle(PodcastWasPurchased $event)
    {
        //
    }
}</code></pre>
<p>更多关于使用事件的信息，参考 <a href="events.html">完整文档</a>。</p>
<h3>命令及队列</h3>
<p>除了 Laravel 4 形式的队列任务，Laravel 5 还支持命令对象直接作为队列任务。这些命令放在 <code>app/Commands</code> 目录下。下面是个例子的命令：</p>
<pre><code>&lt;?php

class PurchasePodcast extends Command implements SelfHandling, ShouldBeQueued
{

    use SerializesModels;

    protected $user, $podcast;

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct(User $user, Podcast $podcast)
    {
        $this-&gt;user = $user;
        $this-&gt;podcast = $podcast;
    }

    /**
     * Execute the command.
     *
     * @return void
     */
    public function handle()
    {
        // Handle the logic to purchase the podcast...

        event(new PodcastWasPurchased($this-&gt;user, $this-&gt;podcast));
    }
}</code></pre>
<p>Laravel 的基底控制器使用了新的 <code>DispatchesCommands</code> trait，让你可以简单的派发命令运行：</p>
<pre><code>$this-&gt;dispatch(new PurchasePodcastCommand($user, $podcast));</code></pre>
<p>当然，你也可以将命令视为同步运行（而不会被放到队列里）的任务。事实上，「命令总线」是个不错的设计模式，可以封装应用程序需要运行的复杂任务。更多相关的信息，参考 <a href="http://d.laravel-china.org/docs/5.3/bus">command bus</a> 文档。</p>
<h3>数据库队列</h3>
<p><code>database</code> 队列驱动现在已经包含在 Laravel 中了，提供了简单的本地端队列驱动，除了数据库相关软件外不需安装其它扩展包，完全开箱即用。</p>
<h3>Laravel 调度器</h3>
<p>在过去，开发者是在 crontab 里配置任务调度的。然而，这是件很头痛的事情，因为你的命令行调度不在版本控制中，并且必须登录到服务器里才能添加新的 Cron 设置。</p>
<p>Laravel 命令行调度的存在，就是为了改变这一情况。</p>
<p>命令行调度系统让你在 Laravel 里定义富有表达性的命令调度，而且只需要在服务器里设置一个 Cron 设置即可。</p>
<p>看起来如下：</p>
<pre><code>$schedule-&gt;command('artisan:command')-&gt;dailyAt('15:00');</code></pre>
<p>参考 <a href="artisan.html#scheduling-artisan-commands">完整文档</a> 学习所有调度相关知识。</p>
<h3>Tinker 与 Psysh</h3>
<p><code>php artisan tinker</code> 命令现在使用 Justin Hileman 的 <a href="https://github.com/bobthecow/psysh">Psysh</a>，一个 PHP 更强大的 REPL。如果你喜欢 Laravel 4 的 Boris，你也会喜欢上 Psysh。更好的是，它可以在 Windows 上运行！</p>
<p>赶快尝试下吧：</p>
<pre><code>php artisan tinker</code></pre>
<h3>DotEnv</h3>
<p>比起一堆令人困惑的、嵌套的环境配置文件，Laravel 5 现在使用了 Vance Lucas 的 <a href="https://github.com/vlucas/phpdotenv">DotEnv</a>。</p>
<p>这个扩展包提供了超级简单的方式管理配置文件，并且让 Laravel 5 环境侦测变得轻松。更多的细节，参考完整的 <a href="configuration.html#environment-configuration">配置文件文档</a>。</p>
<h3>Laravel Elixir</h3>
<p>Jeffrey Way 的 Laravel Elixir 提供了一个流畅、口语化的接口，可以编译以及合并静态资源。如果你曾经因为学习 Grunt 或 Gulp 而被吓到，不必再害怕了。Elixir 让使用 Gulp 编译 Less、Sass 及 CoffeeScript 变得简单。它甚至可以帮你运行测试！</p>
<p>更多关于 Elixir 的信息，参考 <a href="elixir.html">完整文档</a>。</p>
<h3>Laravel Socialite</h3>
<p>Laravel Socialite 是可选的，兼容 Laravel 5.0 以上的 OAuth 认证扩展包。目前 Socialite 支持 Facebook、Twitter、Google 以及 GitHub。它写起来是这样的：</p>
<pre><code>public function redirectForAuth()
{
    return Socialize::with('twitter')-&gt;redirect();
}

public function getUserFromProvider()
{
    $user = Socialize::with('twitter')-&gt;user();
}</code></pre>
<p>不再需要花上数小时编写 OAuth 的认证流程，只要几分钟！查看 <a href="authentication.html#social-authentication">完整文档</a> 里有所有的细节。</p>
<h3>文件系统集成</h3>
<p>Laravel 现在包含了强大的 <a href="https://github.com/thephpleague/flysystem">Flysystem 文件系统</a>（一个文件系统的抽象函数库）。</p>
<p>文件系统以抽象的概念，把本地端文件系统、Amazon S3 和 Rackspace 云存储集成在一起，统一且优雅的 API！</p>
<p>现在要将文件存到 Amazon S3 相当简单：</p>
<pre><code>Storage::put('file.txt', 'contents');</code></pre>
<p>更多关于 Laravel 文件系统集成，参考 <a href="filesystem.html">完整文档</a>。</p>
<h3>Form Requests</h3>
<p>Laravel 5.0 引进了 <strong>form requests</strong>，是继承自 <code>Illuminate\Foundation\Http\FormRequest</code> 的类。这些 request 对象可以和控制器方法依赖注入结合使用，提供一个不需模版的方法，来验证用户输入。让我们深入点，看一个 <code>FormRequest</code> 的例子：</p>
<pre><code>&lt;?php

namespace App\Http\Requests;

class RegisterRequest extends FormRequest
{
    public function rules()
    {
        return [
            'email' =&gt; 'required|email|unique:users',
            'password' =&gt; 'required|confirmed|min:8',
        ];
    }

    public function authorize()
    {
        return true;
    }
}</code></pre>
<p>定义好类后，我们可以在控制器动作里使用类型提示进行依赖注入：</p>
<pre><code>public function register(RegisterRequest $request)
{
    var_dump($request-&gt;input());
}</code></pre>
<p>当 Laravel 的服务容器辨别出要注入的类是个 <code>FormRequest</code> 实例，该请求将会被 <strong>自动验证</strong>。意味着，框架会自动根据你在 form request 类里自定的规则，对请求进行检验。当控制器动作调用时，你可以安全的假设 HTTP 的请求输入己被验证过。</p>
<p>甚至，若这个请求验证不通过，一个 HTTP 重定向（可以自定义），会自动发出，错误消息可以被闪存到 session 中或是转换成 JSON 返回。<strong>表单验证再简单不过了。</strong> 更多关于 <code>FormRequest</code> 验证，请参考 <a href="validation.html#form-request-validation">文档</a>。</p>
<h3>简易控制器请求验证</h3>
<p>Laravel 5 基底控制器包含一个 <code>ValidatesRequests</code> trait。这个 trait 包含了一个简单的 <code>validate</code> 方法可以验证请求。如果对你的应用程序来说 <code>FormRequests</code> 太复杂了，可以考虑使用手动验证方法：</p>
<pre><code>public function createPost(Request $request)
{
    $this-&gt;validate($request, [
        'title' =&gt; 'required|max:255',
        'body' =&gt; 'required',
    ]);
}</code></pre>
<p>如果验证失败，会抛出异常以及返回适当的 HTTP 响应到浏览器。验证错误信息会被闪存到 session 里！而如果请求是 AJAX 请求，Laravel 会自动返回 JSON 格式的验证错误信息。</p>
<p>更多关于这个新方法的信息，参考 <a href="validation.html#controller-validation">这个文档</a>。</p>
<h3>新的生成器</h3>
<p>为了响应新的应用程序默认架构，框架新增了许多 Artisan generator 命令。使用 <code>php artisan list</code> 查看完整的命令列表。</p>
<h3>配置文件缓存</h3>
<p>你现在可以通过 <code>config:cache</code> 命令将所有的配置文件缓存在单个文件中，这样在一定程度上会加快框架的启动效率。</p>
<h3>Symfony VarDumper</h3>
<p>广为使用的 <code>dd</code> 辅助函数，用作在调试时输出变量信息，现采用令人惊艳的 Symfony VarDumper 扩展包。它提供了颜色标记的输出，甚至数组可以自动缩合。在项目中试试下列代码：</p>
<pre><code>dd([1, 2, 3]);</code></pre>
<p><a name="laravel-4.2"></a></p>
<h2>Laravel 4.2</h2>
<p>此发行版本的完整的变更列表可以通过运行 <code>php artisan changes</code> 命令来获取，或者 <a href="https://github.com/laravel/framework/blob/4.2/src/Illuminate/Foundation/changes.json">Github 上的更动纪录</a>。此纪录仅含括主要更新和此发行的更动部分。</p>
<blockquote>
<p><strong>附注:</strong> 在 4.2 开发期间，许多小的 BUG 修正与功能强化被整合至各个 4.1 的子发行版本中。所以，也请一并检查 Laravel 4.1 版本的更新列表。</p>
</blockquote>
<h3>PHP 5.4 需求</h3>
<p>Laravel 4.2 需要 PHP 5.4 以上的版本。此 PHP 更新版本让我们可以使用 PHP 的新功能：traits 来为像是 <a href="../5.4/billing.html">Laravel 收银台</a> 来提供更具表达力的接口。PHP 5.4 也比 PHP 5.3 带来显著的速度及性能提升。</p>
<h3>Laravel Forge</h3>
<p>Larvel Forge，一个网页应用程序，提供一个简单的接口让你创建管理云端上的 PHP 服务器，像是 Linode、DigitalOcean、Rackspace 和 Amazon EC2。</p>
<p>支持自动化 nginx 设置、SSH 密钥管理、Cron job 自动化、通过 NewRelic &amp; Papertrail 服务器监控、「推送部署」、Laravel queue worker 设置等等。Forge 提供最简单且更实惠的方式来部署所有你的 Laravel 应用程序。</p>
<p>默认 Laravel 4.2 的安装里，<code>app/config/database.php</code> 配置文件已为 Forge 设置完成，让你更方便的完成新平台上的全新应用程序的部署。</p>
<p>关于 Laravel Forge 的更多信息可以在 <a href="https://forge.laravel.com">官方 Forge 网站</a> 上找到。</p>
<h3>Laravel Homestead</h3>
<p>Laravel Homestead 是一个健全的 Laravel 和 PHP 应用程序 Vagrant 环境。软件依赖都已提前准备好，可以极快的被启用。</p>
<p>Homestead 包含 Nginx 1.6、PHP 5.5.12、MySQL、Postres、Redis、Memcached、Beanstalk、Node、Gulp、Grunt 和 Bower。Homestead 包含一个简单的 <code>Homestead.yaml</code> 配置文件，允许你在单个封装包中管理多个 Laravel 应用程序。</p>
<p>默认的 Laravel 4.2 安装中包含的 <code>app/config/local/database.php</code> 配置文件已经为你配置好了 Homestead 的数据库连接。让 Laravel 初始化安装与设置更为方便。</p>
<p>官方文档已经更新并包含在 <a href="../5.4/homestead.html">Homestead 文档</a> 中。</p>
<h3>Laravel 收银台</h3>
<p>Laravel 收银台是一个简单、具表达性的资源库，用来管理 Stripe 的订阅服务。虽然安装此组件是可选的，我们仍然将收银台文档包含在主要 Laravel 文档中。新版本的收银台带来了数个错误修正、多货币支持还有支持了最新的 Stripe API。</p>
<h3>Queue Workers 常驻程序</h3>
<p>Artisan <code>queue:work</code> 命令现在支持 <code>--daemon</code> 参数让 worker 可以作为「常驻程序」启用。代表 worker 可以持续的处理队列工作，而不需要重启框架。这让一个复杂的应用程序对 CPU 的使用率有显著的降低。</p>
<p>更多关于 Queue Workers 常驻程序信息请详阅 <a href="../5.4/queues.html#daemon-queue-worker">queue 文档</a>。</p>
<h3>Mail API Drivers</h3>
<p>Laravel 4.2 为 <code>Mail</code> 类采用了新的 Mailgun 和 Mandrill API 驱动。对许多应用程序而言，他提供了比 SMTP 更快也更可靠的方法来递送邮件。新的驱动使用了 Guzzle 4 HTTP 资源库。</p>
<h3>软删除 Traits</h3>
<p>PHP 5.4 的 <code>traits</code> 提供了一个更加简洁的软删除架构和全局作用域，这些新架构为框架提供了更有扩展性的功能，并且让框架更加简洁。</p>
<p>更多关于软删除的文档请见: <a href="../5.4/eloquent.html#soft-deleting">Eloquent documentation</a>。</p>
<h3>更为方便的 认证(auth) &amp; Remindable Traits</h3>
<p>得益于 PHP 5.4 traits，我们有了一个更简洁的用户认证和密码提醒接口，这也让 <code>User</code> 模型文档更加精简。</p>
<h3>&quot;简易分页&quot;</h3>
<p>一个新的 <code>simplePaginate</code> 方法已被加入到查找以及 Eloquent 查找器中。让你在分页视图中，使用简单的「上一页」和「下一页」链接查找更为高效。</p>
<h3>迁移确认</h3>
<p>在正式环境中，破坏性的迁移动作将会被再次确认。如果希望取消提示字符确认请使用 <code>--force</code> 参数。</p>
<p><a name="laravel-4.1"></a></p>
<h2>Laravel 4.1</h2>
<h3>完整更动列表</h3>
<p>此发行版本的完整更动列表，可以在版本 4.1 的安装中命令行运行 <code>php artisan changes</code> 获取，或者浏览 <a href="https://github.com/laravel/framework/blob/4.1/src/Illuminate/Foundation/changes.json">Github 更新文件中</a> 中了解。其中只记录了该版本比较主要的强化功能和更动。</p>
<h3>新的 SSH 组件</h3>
<p>一个全新的 <code>SSH</code> 组件在此发行版本中登场。此功能让你可以轻易的 SSH 至远程服务器并运行命令。更多信息，可以参阅 <a href="http://d.laravel-china.org/docs/ssh">SSH 组件文档</a>。</p>
<p>新的 <code>php artisan tail</code> 命令就是使用这个新的 SSH 组件。更多的信息，请参阅 <code>tail</code> <a href="http://laravel.com/docs/ssh#tailing-remote-logs">命令集文档</a>。</p>
<h3>Boris In Tinker</h3>
<p>如果你的系统支持 <a href="https://github.com/d11wtq/boris">Boris REPL</a>，<code>php artisan thinker</code> 命令将会使用到它。系统中也必须先行安装好 <code>readline</code> 和 <code>pcntl</code> 两个 PHP 扩展包。如果你没这些扩展包，从 4.0 之后将会使用到它。</p>
<h3>Eloquent 强化</h3>
<p>Eloquent 添加了新的 <code>hasManyThrough</code> 关系链。想要了解更多，请参见 <a href="../5.4/eloquent.html#has-many-through">Eloquent 文档</a>。</p>
<p>一个新的 <code>whereHas</code> 方法也同时登场，他将允许 <a href="../5.4/eloquent.html#querying-relations">检索基于关系模型</a>。</p>
<h3>数据库读写分离</h3>
<p>Query Builder 和 Eloquent 目前通过数据库层，已经可以自动做到读写分离。更多的信息，请参考 <a href="../5.4/database.html#read-write-connections">文档</a>。</p>
<h3>队列排序</h3>
<p>队列排序已经被支持，只要在 <code>queue:listen</code> 命令后将队列以逗号分隔送出。</p>
<h3>失败队列作业处理</h3>
<p>现在队列将会自动处理失败的作业，只要在 <code>queue:listen</code> 后加上 <code>--tries</code> 即可。更多的失败作业处理可以参见 <a href="../5.4/queues.html#failed-jobs">队列文档</a>。</p>
<h3>缓存标签</h3>
<p>缓存「区块」已经被「标签」取代。缓存标签允许你将多个「标签」指向同一个缓存对象，而且可以清空所有被指定某个标签的所有对象。更多使用缓存标签信息请见 <a href="../5.4/cache.html#cache-tags">缓存文档</a>。</p>
<h3>更具弹性的密码提醒</h3>
<p>密码提醒引擎已经可以提供更强大的开发弹性，如：认证密码、显示状态消息等等。使用强化的密码提醒引擎，更多的信息 <a href="http://d.laravel-china.org/docs/security#password-reminders-and-reset">请参阅文档</a>。</p>
<h3>强化路由引擎</h3>
<p>Laravel 4.1 拥有一个完全重新编写的路由层。API 一样不变。然而与 4.0 相比，速度快上 100%。整个引擎大幅的简化，且路由表达式大大减少对 Symfony Routing 的依赖。</p>
<h3>强化 Session 引擎</h3>
<p>此发行版本中，我们亦发布了全新的 Session 引擎。如同路由增进的部分，新的 Session 层更加简化且更快速。我们不再使用 Symfony 的 Session 处理工具，并且使用更简单、更容易维护的自定义解法。</p>
<h3>Doctrine DBAL</h3>
<p>如果你有在你的迁移中使用到 <code>renameColumn</code>，之后你必须在 <code>composer.json</code> 里加 <code>doctrine/dbal</code> 进依赖扩展包中。此扩展包不再默认包含在 Laravel 之中。</p>
		</div>

		<div class="main-footer" style="border-top:1px dashed rgba(0, 0, 0, 0.1);padding-top: 30px;margin-top:30px;margin-bottom: 20px;">
			<div class="prev-next-wrap clearfix">

									<a class="btn btn-primary pull-left btn-inverted" href="about.html"><i class="fa fa-arrow-left"></i> 翻译说明</a>
				
			    &nbsp;
								    <a class="btn btn-primary pull-right btn-inverted" href="upgrade.html">升级说明 <i class="fa fa-arrow-right"></i></a>
							</div>
		</div>

	</article>
</div>

	<footer class="main">
		<ul>
			<li class="nav-docs"><a href="../5.4.html">文档</a></li>
<li ><a href="https://news.laravel-china.org/" class="no-pjax">Laravel 资讯</a></li>
<li class="dropdown"><a href="https://laravel-china.org/">Laravel China 社区</a></li>
<li class="nav-forge"><a href="https://laravel-china.org/categories/1">酷工作</a></li>
<li class="nav-docs"><a href="http://lumen.laravel-china.org">Lumen</a></li>
<li class="nav-forge"><a href="https://cs.laravel-china.org/">速查表</a></li>
<li class="nav-forge"><a href="https://laravel-china.org/laravel-tutorial/5.1/about">《Laravel 入门教程》</a></li>
		</ul>
		<p>Laravel is a trademark of Taylor Otwell. Copyright &copy; Taylor Otwell.</p>
		<p class="less-significant">
            <a href="http://jackmcdade.com">
                Designed by<br>
                <svg version="1.1"
	 xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
	 x="0px" y="0px" width="128.2px" height="28px" viewBox="0 0 128.2 28" enable-background="new 0 0 128.2 28" xml:space="preserve"
	>
<defs>
</defs>
<g>
	<path fill="#c3c3c3" d="M14.2,0.4c0,0.2,0,0.5,0,0.7c0,0.2,0,0.5,0,0.7l-1.4-0.3C12.9,3,13,4.5,13.1,6c0.1,1.5,0,3-0.1,4.5
		c0,0.4-0.1,0.8-0.1,1.2c-0.1,0.4-0.1,0.8-0.3,1.2c-0.1,0.4-0.3,0.7-0.5,1.1c-0.2,0.3-0.5,0.6-0.9,0.9c-0.4,0.2-0.9,0.4-1.5,0.6
		c-0.6,0.2-1.1,0.3-1.6,0.3c-0.6,0-1.2-0.1-1.6-0.3c-0.5-0.2-0.9-0.6-1.1-1c-0.3-0.5-0.5-1-0.6-1.6c-0.1-0.6-0.1-1.3,0-2.1
		c0-0.2,0.1-0.5,0.2-0.7C4.9,9.9,5,9.7,5.1,9.5c0.1-0.2,0.2-0.4,0.3-0.6l1.1,0.4C6.7,9.3,7,9.4,7.3,9.5c0.3,0.1,0.5,0.1,0.6,0.2
		c0,0.2,0,0.4-0.1,0.5c-0.1,0.2-0.1,0.3-0.2,0.4c-0.1,0.1-0.2,0.3-0.2,0.4c-0.1,0.2-0.1,0.3-0.1,0.5l-1.3-0.7
		c-0.1,0.3-0.2,0.7-0.2,1.1c0,0.4,0.1,0.8,0.2,1.2c0.2,0.4,0.4,0.7,0.6,1c0.3,0.3,0.6,0.4,1,0.3c0.6,0,1.1-0.3,1.4-0.6
		c0.3-0.4,0.5-0.9,0.7-1.7c0.1-0.7,0.2-1.6,0.2-2.8c0-1.1,0-2.4,0-3.9c0-0.6-0.1-1.3-0.1-2C9.7,2.8,9.6,2.1,9.5,1.4
		c-0.2,0-0.5,0-0.8,0c-0.3,0-0.6,0-0.8,0c-0.8,0-1.5,0-2.2,0c-0.7,0-1.5,0-2.2,0.2c-0.3,0.1-0.6,0.2-1,0.4C2.2,2.1,1.9,2.4,1.6,2.6
		C1.4,2.9,1.2,3.2,1.1,3.6C1,3.9,1,4.3,1.1,4.6c0.1,0.5,0.3,0.8,0.4,0.9V5.4c0-0.4,0.1-0.8,0.4-1c0.3-0.2,0.6-0.3,0.9-0.3
		c0.3,0,0.6,0.1,0.9,0.3C4,4.6,4.1,5,4.1,5.4c0,0.4-0.1,0.8-0.4,1c-0.3,0.2-0.6,0.3-1,0.3H2.7C1.9,6.7,1.3,6.5,0.9,6
		C0.5,5.6,0.2,5.1,0.1,4.5C0,4,0,3.4,0.2,2.7c0.2-0.6,0.5-1.1,1-1.5c0.4-0.3,0.8-0.5,1.2-0.7c0.4-0.1,0.9-0.2,1.4-0.3
		c0.5-0.1,0.9-0.1,1.4-0.1c0.5,0,0.9,0,1.4,0h1.5c0.6,0,1.1,0,1.6,0.1c0.5,0,1,0.1,1.5,0.1c0.5,0,1,0.1,1.5,0.1
		C13.1,0.5,13.6,0.5,14.2,0.4z"/>
	<path fill="#c3c3c3" d="M25.2,14.3c0,0.2,0.1,0.4,0.1,0.6c0,0.2,0.1,0.4,0.1,0.7c-1-0.1-2-0.2-3-0.1c-1.1,0.1-2.1,0.2-3,0.4
		c0-0.2-0.1-0.4-0.1-0.5c0-0.2-0.1-0.4-0.1-0.5c0.2,0,0.5-0.1,0.7-0.1c0.2,0,0.4-0.1,0.6-0.1c-0.1-1.5-0.3-3.1-0.5-4.6
		c-0.5,0.1-0.9,0.1-1.4,0.2c-0.5,0.1-0.9,0.1-1.4,0.2c-0.2,0.7-0.3,1.3-0.5,2c-0.2,0.7-0.3,1.3-0.5,2c0.2,0,0.4,0,0.6,0
		c0.1,0,0.3,0,0.4,0.1c0,0.2,0,0.3,0,0.5c0,0.1,0,0.2,0,0.4c0,0.1,0,0.2-0.1,0.3H14v-1.2h1c0.2-0.5,0.3-1,0.4-1.5
		c0.1-0.5,0.3-1,0.4-1.5c0.2-0.6,0.3-1.2,0.5-1.7c0.2-0.6,0.3-1.2,0.5-1.7c0.2-1.1,0.4-2.1,0.6-3.2c0.2-1.1,0.3-2.1,0.4-3.2
		c-0.2,0-0.5,0-0.7,0c-0.2,0-0.4,0-0.7,0c0-0.2,0.1-0.4,0.1-0.6c0-0.2,0-0.4,0.1-0.6c0.9,0,1.9,0,2.9,0c1,0,2,0,2.9,0l0.2,1.2
		c-0.2,0-0.3,0-0.5,0c-0.2,0-0.3,0-0.5,0c0.3,2.1,0.7,4.3,1,6.5c0.3,2.2,0.7,4.4,1,6.5H25.2z M17.5,9c0.4-0.1,0.7-0.1,1.1-0.2
		c0.4-0.1,0.8-0.1,1.2-0.2c-0.2-1-0.3-2-0.5-2.9c-0.2-1-0.4-1.9-0.6-2.9c-0.2,1-0.4,2.1-0.5,3.1C17.9,6.9,17.7,8,17.5,9z"/>
	<path fill="#c3c3c3" d="M36.7,10.4c-0.1,0-0.2,0-0.3,0c-0.1,0-0.2,0-0.3,0c0,0.6,0,1.2-0.2,1.9c-0.2,0.6-0.5,1.2-1,1.6
		c-0.5,0.5-1,0.9-1.6,1.1c-0.6,0.3-1.3,0.4-2,0.5c-0.6,0.1-1.1,0.1-1.8,0c-0.6-0.1-1.1-0.4-1.6-0.7c-0.2-0.2-0.5-0.4-0.8-0.7
		c-0.3-0.3-0.5-0.5-0.6-0.8c-0.3-0.5-0.5-1-0.6-1.5c-0.2-0.5-0.3-0.9-0.4-1.4c-0.1-0.5-0.2-1-0.2-1.5c0-0.5,0-1,0.1-1.6
		c0.2-1,0.4-2,0.8-2.9c0.4-0.9,0.8-1.7,1.4-2.3c0.5-0.7,1.2-1.2,1.9-1.6C30.2,0.2,30.9,0,31.7,0c0.3,0,0.5,0,0.8,0.1
		c0.3,0.1,0.5,0.2,0.7,0.4c0.3,0.3,0.7,0.7,1,1.2c0.3,0.5,0.6,1.2,0.7,1.9c0.1,0,0.2,0,0.3,0c0.1,0,0.2,0,0.3,0c0,0.1,0,0.2,0,0.3
		c0,0.1,0,0.2,0,0.3L33,4.6c-0.3,0.1-0.5,0.1-0.6,0c-0.1,0-0.2-0.1-0.2-0.2c-0.1-0.1-0.1-0.2,0-0.3c0.1,0,0.2,0,0.2,0
		c0.1,0,0.1,0,0.2,0c0.2-0.2,0.3-0.3,0.3-0.6c0-0.2,0-0.5,0-0.7c0-0.5-0.2-0.9-0.5-1.3c-0.2-0.2-0.3-0.3-0.4-0.4
		C31.8,1,31.6,1,31.4,1.1c-0.2,0-0.4,0.2-0.6,0.4c-0.2,0.2-0.4,0.5-0.5,0.9C30,2.6,29.9,3,29.8,3.3c-0.1,0.3-0.2,0.5-0.2,0.7
		c-0.6,2.6-0.7,5.3-0.2,8c0.1,0.3,0.2,0.7,0.3,1s0.3,0.6,0.5,0.9c0.2,0.3,0.5,0.5,0.8,0.7c0.3,0.2,0.6,0.2,1,0.1
		c0.6-0.1,1-0.4,1.4-1c0.3-0.5,0.6-1.1,0.7-1.8c0.1-0.3,0.1-0.6,0.1-0.9v-0.5c-0.2,0-0.4,0-0.6-0.1c-0.1-0.1-0.2-0.2-0.2-0.3
		c0-0.1,0-0.2,0.1-0.3c0.6,0,1.2,0,1.7,0c0.6,0,1.2,0,1.7,0c0,0.1,0,0.2-0.1,0.3C36.7,10.2,36.7,10.3,36.7,10.4z"/>
	<path fill="#c3c3c3" d="M48,14.2c0.1,0.2,0.3,0.3,0.5,0.4c0.2,0.1,0.5,0.1,0.7,0c0.1,0.1,0.1,0.2,0.1,0.4c0,0.2-0.1,0.3-0.2,0.4
		c-0.1,0.1-0.2,0.2-0.4,0.2c-0.2,0-0.3,0-0.4,0c-0.3,0-0.7,0-1,0c-0.3,0-0.7,0-1-0.1c-0.3-0.1-0.7-0.2-1-0.4
		c-0.3-0.2-0.5-0.4-0.7-0.7c-0.2-0.3-0.3-0.6-0.3-1c0-0.3,0-0.7,0-1.1V9.9c0-0.1,0-0.3,0-0.4c0-0.2-0.1-0.3-0.2-0.5
		c-0.1-0.2-0.3-0.3-0.4-0.4c-0.2-0.1-0.4-0.1-0.7-0.1c-0.1,0-0.2,0-0.5,0.1c-0.2,0.3-0.3,0.5-0.5,0.8c-0.2,0.3-0.3,0.5-0.5,0.7
		c0,0.8,0,1.5-0.1,2.2c0,0.7-0.1,1.5-0.1,2.1h1.4v1.1c-0.5,0-0.9,0.1-1.3,0c-0.4,0-0.8,0-1.2-0.1c-0.4,0-0.8-0.1-1.2-0.1
		c-0.4,0-0.8,0-1.3,0c-0.1,0-0.3,0-0.4,0c-0.1,0-0.2,0-0.3-0.1c-0.1,0-0.1-0.1-0.1-0.2c0-0.1-0.1-0.3-0.1-0.4c0-0.1,0-0.3,0-0.4
		c0-0.1,0.1-0.2,0.1-0.2c0.2,0.1,0.4,0.2,0.6,0.1s0.4-0.2,0.5-0.4c0-0.1,0.1-0.3,0.1-0.7c0-0.4,0-0.9,0.1-1.6c0-0.6,0.1-1.3,0.1-2.1
		c0-0.8,0-1.6,0.1-2.4c0-0.8,0-1.5,0.1-2.3c0-0.7,0.1-1.3,0.1-1.8c0-0.2,0-0.5,0-0.7c0-0.2-0.1-0.4-0.2-0.6
		c-0.1-0.2-0.3-0.3-0.5-0.4c-0.2-0.1-0.4,0-0.6,0.1c0-0.2-0.1-0.5-0.1-0.7c0-0.2,0-0.4-0.1-0.7c1,0,2,0.1,3,0.1c0.9,0,1.9,0.1,3,0.1
		c0,0.1,0,0.2,0,0.3c0,0.1,0,0.3,0.1,0.4c0,0.1,0,0.3,0,0.4c0,0.1,0,0.2-0.1,0.2c-0.1,0.1-0.2,0.1-0.3,0.1c-0.1,0-0.2,0-0.4-0.1
		c-0.1-0.1-0.3-0.1-0.4-0.2c-0.1-0.1-0.3-0.1-0.3-0.1c-0.1,0.9-0.1,1.9-0.1,2.9c0,1-0.1,2-0.1,3.1c0.7-1.2,1.4-2.5,2-3.8
		c0.2-0.3,0.3-0.6,0.4-0.9c0.1-0.3,0.3-0.6,0.5-0.9c0.2-0.3,0.4-0.5,0.7-0.7C45.4,1,45.7,0.9,46,0.8c0.3-0.1,0.7-0.1,1,0
		c0.3,0.1,0.6,0.2,0.9,0.5c0.2,0.3,0.4,0.6,0.4,1c0,0.4,0.1,0.8,0,1.1c0,0.2,0,0.3,0,0.5c0,0.2-0.1,0.3-0.2,0.4
		c-0.1,0.2-0.2,0.3-0.4,0.4c-0.2,0.1-0.4,0.1-0.5,0.2c-0.1,0-0.3,0.1-0.4,0.1c-0.1,0-0.3,0-0.4,0C46.2,4.7,46,4.6,46,4.4
		c-0.1-0.2-0.1-0.4,0-0.5c0.1-0.2,0.2-0.3,0.3-0.3c0.1,0,0.2-0.1,0.4-0.1c0.2-0.1,0.3-0.2,0.3-0.3c0.1-0.2,0.1-0.3,0.1-0.5
		C47.1,2.4,47,2.2,47,2c-0.1-0.2-0.2-0.3-0.3-0.3c-0.2,0-0.3,0-0.5,0.1C46,1.9,45.9,2,45.7,2.2c-0.2,0.2-0.3,0.4-0.4,0.6
		C45.2,3,45,3.3,44.9,3.5c-0.1,0.3-0.3,0.6-0.4,0.8c-0.2,0.2-0.3,0.5-0.4,0.8c-0.4,0.9-0.8,1.7-1.2,2.5c0.3,0,0.6-0.1,1,0
		c0.4,0,0.7,0,1,0c0.3,0,0.7,0.1,1,0.2c0.3,0.1,0.6,0.3,0.8,0.6c0.3,0.3,0.4,0.6,0.5,1c0.1,0.4,0.1,0.8,0.2,1.1l0.2,2.1
		c0,0.2,0.1,0.5,0.1,0.7C47.7,13.7,47.8,14,48,14.2z"/>
	<path fill="#c3c3c3" d="M71.7,13.9c0.2,0.2,0.4,0.4,0.7,0.5c0.3,0.1,0.5,0,0.8-0.1c0,0.2,0.1,0.3,0.1,0.6c0.1,0.2,0.1,0.4,0.1,0.6
		c-0.3,0-0.7,0-1.1,0s-0.8,0-1.3,0.1c-0.4,0-0.9,0-1.3,0c-0.4,0-0.8,0-1,0c0-0.1,0-0.1,0-0.2c0-0.1,0.1-0.2,0.2-0.3
		c0.1-0.1,0.2-0.2,0.4-0.3c0.2-0.1,0.3-0.1,0.6-0.1c0.1,0,0.1-0.2,0.1-0.7c0-0.4,0-1,0-1.6c0-0.6,0-1.2-0.1-1.9s0-1.1,0-1.5
		c0-1,0-1.9,0-2.6c0-0.7,0.1-1.5,0.1-2.2c-0.6,1.3-1.1,2.7-1.6,4.1c-0.5,1.5-1,3-1.5,4.4c0,0,0.1,0.1,0.1,0.2c-0.2,0-0.4,0-0.7,0.1
		c-0.3,0.1-0.5,0.1-0.7,0.1c-0.5-1.9-1.1-3.7-1.6-5.5c-0.5-1.8-1.1-3.6-1.6-5.5c-0.1,1-0.1,2-0.1,3c0,1.1-0.1,2.1-0.1,3.2
		c0,1.1,0,2.1-0.1,3.2c0,1-0.1,2-0.1,3h1.4v1.1c-0.5,0-0.9,0.1-1.3,0c-0.4,0-0.8,0-1.2-0.1c-0.4,0-0.8-0.1-1.2-0.1
		c-0.4,0-0.8,0-1.3,0c-0.1,0-0.3,0-0.4,0c-0.1,0-0.2,0-0.3-0.1c-0.1,0-0.1-0.1-0.1-0.2c0-0.1-0.1-0.3-0.1-0.4c0-0.1,0-0.3,0-0.4
		c0-0.1,0.1-0.2,0.1-0.2c0.2,0.1,0.4,0.2,0.6,0.1s0.4-0.2,0.5-0.4c0-0.1,0.1-0.3,0.1-0.7c0-0.4,0-0.9,0.1-1.6c0-0.6,0.1-1.3,0.1-2.1
		C59,8.8,59,8,59,7.2c0-0.8,0-1.5,0.1-2.3c0-0.7,0.1-1.3,0.1-1.8c0-0.2,0-0.5,0-0.7c0-0.2-0.1-0.4-0.2-0.6c-0.1-0.2-0.3-0.3-0.5-0.4
		c-0.2-0.1-0.4,0-0.6,0.1c0-0.2-0.1-0.5-0.1-0.7c0-0.2,0-0.4-0.1-0.7c1,0,2,0.1,3,0.1c0.9,0,1.9,0.1,3,0.1c0,0.3-0.1,0.5-0.4,0.7
		c0.3,1.3,0.6,2.6,1,3.9c0.4,1.3,0.8,2.6,1.2,3.9c0.2-0.6,0.4-1.3,0.6-1.9c0.2-0.6,0.4-1.2,0.6-1.8C67,4.6,67.2,4,67.5,3.4
		c0.2-0.6,0.4-1.3,0.6-2c-0.1,0-0.3,0-0.4-0.1c-0.1,0-0.2,0-0.4-0.1c-0.1,0-0.1-0.1-0.1-0.3c0-0.1,0.1-0.2,0.1-0.3
		c0.1-0.1,0.2-0.1,0.3-0.1c0.1,0,0.2,0,0.3,0c0.4,0,0.7,0,1,0s0.6,0,0.9,0c0.3,0,0.6,0,0.9,0c0.3,0,0.6,0,1,0c0.1,0,0.3,0,0.4,0
		c0.1,0,0.3,0.1,0.4,0.2c0.1,0.1,0.2,0.2,0.2,0.4c0,0.2,0,0.3-0.2,0.3c-0.1-0.1-0.2-0.1-0.3-0.1c-0.1,0-0.2,0.1-0.3,0.1
		c-0.2,0.4-0.3,0.8-0.4,1.3c-0.1,0.5-0.1,0.9-0.1,1.4c-0.2,2.8-0.2,5.6,0,8.4c0,0.3,0,0.5,0.1,0.7C71.4,13.5,71.5,13.7,71.7,13.9z"
		/>
	<path fill="#c3c3c3" d="M81.7,12c-0.1,0-0.1,0-0.2,0c-0.1,0-0.1,0-0.2,0c0,0.4,0,0.9-0.2,1.3c-0.1,0.4-0.4,0.8-0.7,1.1
		c-0.3,0.3-0.7,0.6-1.1,0.8c-0.4,0.2-0.9,0.3-1.3,0.4c-0.4,0.1-0.8,0-1.2,0c-0.4-0.1-0.8-0.2-1.1-0.5c-0.2-0.1-0.3-0.3-0.5-0.5
		c-0.2-0.2-0.3-0.4-0.4-0.6c-0.2-0.4-0.3-0.7-0.4-1c-0.1-0.3-0.2-0.6-0.3-1C74,11.7,74,11.4,74,11c0-0.3,0-0.7,0.1-1.1
		c0.1-0.7,0.3-1.4,0.5-2c0.3-0.6,0.6-1.1,0.9-1.6s0.8-0.8,1.3-1.1c0.5-0.3,1-0.4,1.5-0.4c0.2,0,0.4,0,0.6,0.1
		c0.2,0.1,0.3,0.1,0.5,0.3C79.6,5.4,79.8,5.6,80,6c0.2,0.4,0.4,0.8,0.5,1.3c0.1,0,0.1,0,0.2,0c0.1,0,0.1,0,0.2,0c0,0.1,0,0.1,0,0.2
		c0,0.1,0,0.1,0,0.2L79.2,8c-0.2,0.1-0.3,0.1-0.4,0c-0.1,0-0.1-0.1-0.2-0.2c0-0.1,0-0.1,0-0.2c0.1,0,0.1,0,0.2,0c0,0,0.1,0,0.2,0
		c0.1-0.1,0.2-0.2,0.2-0.4c0-0.2,0-0.3,0-0.5c0-0.3-0.1-0.6-0.3-0.9c-0.1-0.1-0.2-0.2-0.3-0.3c-0.1-0.1-0.2-0.1-0.4,0
		c-0.1,0-0.3,0.1-0.4,0.3c-0.1,0.2-0.3,0.4-0.4,0.6c-0.1,0.2-0.2,0.4-0.3,0.6c-0.1,0.2-0.1,0.4-0.1,0.5c-0.4,1.8-0.5,3.6-0.1,5.5
		c0.1,0.2,0.1,0.4,0.2,0.7c0.1,0.2,0.2,0.4,0.3,0.6c0.1,0.2,0.3,0.3,0.6,0.5c0.2,0.1,0.4,0.1,0.7,0.1c0.4-0.1,0.7-0.3,1-0.7
		c0.2-0.4,0.4-0.8,0.5-1.2c0-0.2,0.1-0.4,0.1-0.6v-0.3c-0.2,0-0.3,0-0.4,0c-0.1,0-0.1-0.1-0.1-0.2c0-0.1,0-0.2,0.1-0.2
		c0.4,0,0.8,0,1.2,0c0.4,0,0.8,0,1.2,0c0,0.1,0,0.1,0,0.2C81.8,11.8,81.8,11.9,81.7,12z"/>
	<path fill="#c3c3c3" d="M83.5,14.2c0.2-4.3,0.3-8.5,0.2-12.8c-0.3,0-0.6,0-0.9,0c-0.3,0-0.6,0-0.9,0c0-0.2,0-0.3,0-0.5s0-0.3,0-0.5
		c0.7,0,1.3,0,2-0.1c0.7,0,1.3,0,2-0.1c0.8-0.2,1.6-0.2,2.4-0.1c0.8,0.1,1.6,0.3,2.4,0.5c0.7,0.3,1.4,0.7,1.9,1.2
		c0.5,0.5,0.9,1.1,1.1,1.8C94,4.9,94.1,6.1,94,7.4C94,8.6,93.8,9.8,93.7,11c0,0.4-0.1,0.8-0.2,1.2c-0.1,0.4-0.3,0.8-0.5,1.1
		c-0.3,0.5-0.8,1-1.3,1.3c-0.5,0.3-1.1,0.5-1.7,0.6c-0.5,0.1-0.9,0.2-1.4,0.1c-0.5,0-0.9,0-1.4-0.1v0c-0.2,0-0.3,0-0.5,0
		s-0.4,0-0.5,0l-0.1,0c0,0,0,0,0,0c-0.6,0-1.3,0-1.9,0c-0.6,0-1.3,0-1.9,0c-0.2-0.4-0.1-0.8,0.2-1.1c0.2-0.2,0.3-0.2,0.5-0.3
		C83.2,14.1,83.4,14.1,83.5,14.2z M89.4,1.9c-0.4-0.3-0.8-0.5-1.3-0.6c-0.5-0.1-1-0.1-1.5-0.1c-0.3,4.5-0.2,9.1,0.4,13.6
		c0.2,0,0.4,0,0.5-0.1c0.2,0,0.4-0.1,0.6-0.1c0.3-0.1,0.6-0.2,0.9-0.4c0.3-0.2,0.6-0.4,0.8-0.7c0.2-0.3,0.4-0.6,0.5-1
		s0.2-0.7,0.2-1.1c0.4-2.1,0.4-4.2,0.2-6.3c-0.1-0.6-0.2-1.2-0.4-1.9C90.3,2.8,89.9,2.3,89.4,1.9z"/>
	<path fill="#c3c3c3" d="M102.4,9.7c-0.6-0.1-1.3-0.1-2,0c-0.7,0.1-1.4,0.4-2,0.8l-0.2-1.4L99.1,9c0-0.4-0.1-0.7-0.1-1
		c0-0.2-0.1-0.5-0.1-0.9c-0.3,0-0.6,0.1-0.9,0.1c-0.3,0-0.6,0.1-1,0.1c-0.2,0.7-0.3,1.3-0.4,1.8c-0.1,0.5-0.2,1.1-0.4,1.6l0.2-0.1
		l0.7,0.6c-0.4,0.2-0.8,0.6-1.2,1.1c-0.4,0.5-0.7,1-0.9,1.5l-0.9-0.5c0-0.1,0.1-0.2,0.2-0.4c0.1-0.2,0.2-0.3,0.2-0.4
		c0.1-0.2,0.2-0.5,0.3-1c0.1-0.4,0.2-0.9,0.4-1.3c0.1-0.5,0.2-0.9,0.3-1.3c0.1-0.4,0.2-0.7,0.2-0.9c0.1-0.4,0.2-0.8,0.3-1.2
		c0.1-0.4,0.2-0.8,0.3-1.2c0.2-0.7,0.3-1.4,0.4-2.1c0.1-0.7,0.2-1.4,0.3-2.2c-0.1,0-0.2,0-0.3,0c-0.1,0-0.2,0-0.3,0l0.1-0.8l4-0.1
		l0.1,0.8c-0.1,0-0.2,0-0.2,0c0,0-0.1,0-0.2,0c0.1,0.7,0.2,1.4,0.3,2c0.1,0.6,0.2,1.2,0.3,1.8c0.1,0.6,0.2,1.2,0.3,1.8
		c0.1,0.6,0.2,1.3,0.4,2c0.2,0,0.3,0,0.3,0c0,0,0.1,0,0.3,0L102.4,9.7z M98.8,6.1c-0.1-0.7-0.2-1.3-0.3-2c-0.1-0.6-0.3-1.3-0.4-2
		c-0.1,0.6-0.2,1.3-0.4,2.1c-0.1,0.7-0.3,1.5-0.5,2.2L98.8,6.1z"/>
	<path fill="#c3c3c3" d="M124.9,20.1c0-0.3,0.1-0.6,0.3-0.8c0.2-0.2,0.4-0.3,0.7-0.4c0.3-0.1,0.5,0,0.8,0.1c0.3,0.1,0.5,0.3,0.6,0.5
		c0.3,0.4,0.6,0.9,0.7,1.4c0.2,0.5,0.2,1,0.2,1.5c0,0.5-0.1,1-0.3,1.5c-0.2,0.5-0.4,1-0.7,1.4c-0.6,0.9-1.4,1.6-2.4,2
		c-1,0.5-2,0.7-3,0.7c-1.5,0-2.8-0.3-3.9-1s-2.1-1.4-3-2.4c-0.9-1-1.8-2.1-2.5-3.2c-0.8-1.2-1.5-2.3-2.3-3.5c-1.1,1.2-2.4,2.2-3.9,3
		c-1.5,0.8-3,1.1-4.5,1c-1.1,0-2.1-0.1-3-0.5c-0.9-0.3-1.6-0.8-2.2-1.4c-0.6-0.6-0.9-1.3-1.1-2.2c-0.2-0.8-0.1-1.7,0.2-2.7
		c0.3-0.9,0.7-1.6,1.3-2.2c0.6-0.6,1.2-1.1,2-1.5c0.7-0.4,1.5-0.6,2.4-0.7c0.8-0.1,1.7,0,2.6,0.2c0-1.7,0-3.4,0-5c0-1.7,0-3.2,0-4.6
		c-0.3,0-0.6,0-0.9,0c-0.3,0-0.6,0-0.9,0c0-0.2,0-0.3,0-0.5s0-0.3,0-0.5l3.7-0.1c0.8-0.2,1.6-0.2,2.4-0.1c0.8,0.1,1.6,0.3,2.4,0.5
		c0.7,0.3,1.4,0.7,1.9,1.2c0.5,0.5,0.9,1.1,1.1,1.8c0.3,1.2,0.4,2.4,0.3,3.6c-0.1,1.2-0.2,2.5-0.4,3.7c-0.1,1-0.4,2-0.8,3
		c-0.5,1-1,2-1.7,2.9c0.3,0.4,0.6,0.8,0.8,1.2c0.3,0.4,0.5,0.8,0.8,1.2c0.5,0.8,1.1,1.6,1.7,2.5c0.6,0.8,1.3,1.6,2,2.4
		c0.7,0.7,1.5,1.3,2.4,1.8s1.8,0.7,2.9,0.8c1.1,0,2.1-0.2,3-0.7c0.9-0.5,1.6-1.2,2.1-2.2c0.2-0.4,0.3-0.8,0.4-1.3
		c0.1-0.5,0-0.9-0.1-1.3c-0.2,0.1-0.4,0.2-0.6,0.2c-0.2,0-0.4,0-0.6-0.1c-0.2-0.1-0.4-0.2-0.5-0.4S124.9,20.4,124.9,20.1z M102.9,21
		c1.5-0.4,2.8-1,3.7-1.8c0.9-0.8,1.7-1.7,2.3-2.8c-0.2-0.2-0.3-0.5-0.6-0.7c-0.6-0.7-1.2-1.4-1.9-1.9c0,0.6,0.1,1.2,0.1,1.8
		c0,0.6,0.1,1.1,0.2,1.6h0v0.1c-0.5,0-0.9,0-1.3,0c-0.4,0-0.8,0-1.2,0c-0.3,0-0.6,0-0.9,0c-0.3,0-0.6,0-0.9,0
		c-0.1-0.2-0.1-0.4,0-0.7c0-0.2,0.1-0.3,0.3-0.5c0.3-0.3,0.7-0.4,1.1-0.2l0.1-3.5c-0.5-0.2-1-0.3-1.5-0.3c-0.5,0-1.1,0-1.6,0.1
		c-0.6,0.1-1.1,0.3-1.6,0.6c-0.5,0.3-0.9,0.7-1.3,1.1c-0.4,0.4-0.7,0.9-0.9,1.5c-0.2,0.5-0.3,1.1-0.3,1.6c0,0.7,0.2,1.3,0.6,1.8
		c0.4,0.5,0.9,0.9,1.4,1.4c0.2,0.2,0.5,0.3,0.8,0.5c0.3,0.1,0.7,0.2,1.1,0.3c0.4,0.1,0.8,0.1,1.2,0.1
		C102.1,21.1,102.5,21.1,102.9,21z M109.3,1.9c-0.4-0.3-0.8-0.5-1.2-0.6c-0.5-0.1-0.9-0.1-1.4-0.1c-0.1,1.7-0.2,3.4-0.3,5.3
		c-0.1,1.9-0.1,3.7,0,5.6c0.6,0.4,1.2,0.8,1.7,1.4c0.5,0.5,1,1.1,1.5,1.6c0.2-0.6,0.4-1.2,0.6-1.9c0.2-0.6,0.3-1.2,0.3-1.7
		c0.2-1.1,0.2-2.1,0.3-3.1c0-1,0-2.1-0.1-3.1c-0.1-0.6-0.2-1.2-0.4-1.9C110.1,2.8,109.8,2.3,109.3,1.9z"/>
	<path fill="#c3c3c3" d="M116.5,1.2c-0.3,0-0.6,0-0.9,0c-0.3,0-0.6,0-0.9,0V0.4c0.5,0,0.9,0,1.2-0.1s0.7,0,1.1,0c0.4,0,0.7,0,1.1,0
		s0.8,0,1.3-0.1c0.9,0,1.8,0,2.8-0.1c0.9,0,1.8,0,2.8-0.1c0,0.6,0,1.2,0,1.8c0,0.6,0,1.2,0,1.8c-0.2,0-0.3,0-0.5,0
		c-0.2,0-0.3,0-0.5,0c-0.1,0-0.2,0-0.3,0c-0.1,0-0.1-0.1,0-0.1c0.1-0.2,0.1-0.4,0.1-0.6s0-0.4-0.1-0.6c-0.1-0.2-0.2-0.4-0.3-0.6
		c-0.1-0.2-0.2-0.3-0.4-0.4c-0.2-0.1-0.4-0.2-0.6-0.2c-0.2,0-0.5,0-0.7,0c-0.3,0-0.5,0.1-0.8,0.1c-0.3,0.1-0.5,0.2-0.6,0.4
		c-0.1,0.2-0.1,0.3-0.1,0.3c0,0.1,0,0.2,0,0.3c0,0.7-0.1,1.3-0.1,2c0,0.6-0.1,1.3-0.1,1.9c0,0.2,0,0.3,0,0.5c0,0.2,0,0.3,0,0.5
		c0.6-0.2,1.2-0.3,1.9-0.4c0.6-0.1,1.2-0.3,1.9-0.4c0,0.1,0.1,0.2,0.1,0.3c0,0.1,0,0.3,0,0.4c0,0.2-0.1,0.3-0.1,0.4
		c-0.1,0.1-0.1,0.2-0.1,0.3c-0.1,0.1-0.2,0.1-0.4,0.2c-0.1,0-0.3,0.1-0.4,0.1c-0.5,0.1-0.9,0.2-1.4,0.3c-0.5,0.1-0.9,0.1-1.4,0.2
		c0,1-0.1,2-0.2,2.9c-0.1,1-0.1,1.9-0.2,2.9c0.8,0.2,1.5,0.3,2,0.1c0.6-0.2,1.2-0.5,1.9-1c0.2-0.1,0.2-0.3,0.2-0.5
		c0-0.2,0-0.5,0-0.7c0-0.2,0.1-0.5,0.2-0.6c0.1-0.2,0.3-0.3,0.7-0.4c0.4,0,0.6,0.1,0.7,0.4c0.1,0.3,0.2,0.7,0.2,1.1
		c0,0.5,0,0.9-0.1,1.4c-0.1,0.5-0.1,0.9,0,1.2c-0.5,0-1,0-1.4,0c-0.4,0-0.8,0-1.2,0.1c-0.4,0-0.8,0-1.2,0.1c-0.4,0-0.9,0-1.3,0
		c-0.9,0-1.7,0-2.5,0.1c-0.7,0.1-1.6,0.1-2.4,0.1c-0.2-0.2-0.2-0.4-0.2-0.7c0-0.2,0.1-0.5,0.3-0.6c0.2-0.2,0.3-0.3,0.6-0.3
		c0.2-0.1,0.5,0,0.7,0.1c0.1-2.1,0.2-4.3,0.1-6.5C116.3,5.5,116.3,3.4,116.5,1.2z"/>
</g>
</svg>

            </a>
        </p>
	</footer>

	<script>
		var algolia_app_id      = 'FU55RWGNDN';
		var algolia_search_key  = 'c41c5de31ca55044dbb0bde815d35121';
				var version             = '5.3';
			</script>

	<script id="search_suggestion_template" type="text/template">
	<div class="autocomplete-wrapper">
		{{#_highlightResult.h1}}
		<div class="h1">
			{{{ _highlightResult.h1.value }}}
		</div>
		{{/_highlightResult.h1}}

		<div class="sub-section">
			{{#_highlightResult.h2}}
			<div class="h2">
				<span class="hash">#</span> {{{ _highlightResult.h2.value }}}
			</div>
			{{/_highlightResult.h2}}

			{{#_highlightResult.h3}}
			<div class="h3">
				> {{{ _highlightResult.h3.value }}}
			</div>
			{{/_highlightResult.h3}}

			{{#_highlightResult.h4}}
			<div class="h4">
				> {{{ _highlightResult.h4.value }}}
			</div>
			{{/_highlightResult.h4}}
		</div>

		{{#_highlightResult.content}}
		<div class="content">
			{{{ _highlightResult.content.value }}}
		</div>
		{{/_highlightResult.content}}
	</div>
</script>

<script id="search_empty_template" type="text/template">
	<div class="autocomplete-wrapper empty">
		<div class="h2">We didn't find any result for "{{query}}". Sorry!</div>
	</div>
</script>

<script id="search_footer_template" type="text/template">
	<div class="footer">
		<a target="_blank" href="https://www.algolia.com/referrals/5a08e6a4/join">
			<img width="50" src="/docs/assets/img/algolia-logo.png">
			<div class="powered">powered by</div>
			<div style="clear: both"></div>
		</a>
	</div>
</script>

	<script src="../../build/assets/js/laravel-db513c8174.js"></script>
	<script src="../../assets/js/viewport-units-buggyfill.js"></script>

	<script>window.viewportUnitsBuggyfill.init();</script>
    <script>
          ga('create', 'UA-53903425-7', 'auto');
          ga('send', 'pageview');
    </script>
</body>
</html>
